scrapy 一個很好用的python爬蟲框架
開發環境:python3.6 + centos 7
安裝scrapy: pip install scrapy
爬蟲網站: http://www.bsriceones.ga
首先我們創建一個工程:
scrapy startproject bsriceones
然后 我們cd bsriceones 進入這個工程,在改目錄下,我們創建一個html文件夾來保存一會爬下來的網頁的源碼,在cd spider進入我們的爬蟲文件,我們來寫需要爬蟲的網站的商品的源碼下載。
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
import re,time
class BselSpider(CrawlSpider):
name = 'bs'
allowed_domains = ['bsriceones.ga']
start_urls = ['http://www.bsriceones.ga/']
#規則:將需要點擊的網址按規則一條一條寫入,以下規則寫入兩條,一條是標題欄以及翻頁的信息,一條是商品信息,並調用回調函數parse_item,這里來簡單的,進行源碼保存
rules=(
Rule(LinkExtractor(allow=r'http://www.bsriceones.ga/[a-zA-Z0-9-]+/[a-zA-Z0-9-]+'), callback='parse_item', follow=True),
#不需要回調函數 因為規則可以做到
Rule(LinkExtractor(allow=r'http://www.bsriceones.ga/[a-zA-Z0-9-]+/'),follow=True),
#Rule(LinkExtractor(allow=r'http://www.bsriceones.ga/[a-zA-Z0-9-]+/.*page=\d+'), follow=True),
)
def parse_item(self, response):
html_name = re.findall(r'p-\d+',response.url)[0]
print("-------------------------------------")
print(response.url)
print(html_name)
print("-------------------------------------")
with open("/samba/xww/py/pytest/bsriceones/bsriceones/bsriceones/html/"+html_name+".html",'wb') as f:
f.write(response.body)
然后我們cd ../ 回到上級目錄,打開setting文件,修改一下信息
#將這個改false
ROBOTSTXT_OBEY = False
#帶上ua信息,可以在網頁請求該網址的時候,將出現的ua信息copy下來,並帶上referer參數,跟上你要爬的域名。
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'Referer':'http://www.bsriceones.ga',
}
然后scrapy crawl bs 或者 scrapy runspider bs.py 就可以運行程序啦,一會你的html文件夾里面就有商品的源碼啦。

上面只是一個簡單程序,爬蟲網頁商品信息的源碼。
當然你還可以對源碼進行操作,將源碼的你需要的字段(標題,價格,描述...)進行提取,存進mongo數據庫(我比較習慣用mongo數據庫,大家可以進行相應的選擇)里面。
mongo:
稍微再提一下,如果你們想存mongo,首先安裝mongo
pip install pymongo
然后再將mongo模塊引入,數據庫地址連接,就可以進行你們的增刪改查操作了,具體操作我就不說了,看mongo官網文檔地址,非常詳細。
from pymongo import MongoClient
client = MongoClient('mongodb://數據庫地址:27017/')
db=client.product
代理:
有時候爬蟲的時候,大量高並發的采集數據會碰到封ip,這時候我們就要使用代理。大家可以去買代理,我自己這邊整理了一份代理ip的txt文件,直接使用就好,買的也是一樣。有代理的怎么使用呢?在middlewares.py文件里面進行代理的配置。
import request,json,random,datetime
class BsspiderProxyIPLoadMiddleware(object):
def __init__(self):
self.proxy = ""
self.expire_datetime=datetime.datetime.now()-datetime.timedelta(minutes=1)
#self._get_proxyip()
def _get_proxyip(self):
#代理形式 ip:端口號 一個一行
f=open("proxy.txt")
proxys= f.read().split("\n")
p = random.sample(proxys,1)[0]
print("proxy:",p)
self.proxy = p
self.expire_datetime = datetime.datetime.now()+datetime.timedelta(minutes=1)
def _check_expire(self):
if datetime.datetime.now() >= self.expire_datetime:
self._get_proxyip()
print("切換ip")
def process_request(self,spider,request):
self._check_expire()
request.meta['proxy']="http://"+self.proxy
然后配置好下載器中間件,我們就要到setting文件注冊一下
DOWNLOADER_MIDDLEWARES = {
'middlewares所在文件的位置.middlewares.某某某spiderProxyIPLoadMiddleware': 543
}
其實scrapy這個框架很好用的,我們可以先看文檔,邊看邊學邊敲,碰到不理解的,我們可以繼續往下看,等全看完了,我們回來再看第二遍,從頭開始,發現就很簡單啦!
文檔地址:
scrapy:https://docs.scrapy.org/en/latest/
mongo:https://docs.mongodb.com/
