使用scrapy創(chuàng)建項目: scrapy startproject 項目名稱
進(jìn)入到項目里的spider文件,創(chuàng)建爬蟲文件,scrapy genspider 爬蟲名稱 域名
項目文件分析:
spider文件里放爬蟲文件,初始屬性name為爬蟲名稱,allow_domains為允許爬取的域,parse類方法為默認(rèn)解析數(shù)據(jù)的方法,會先從start_urls中發(fā)起請求,獲取響應(yīng),解析后可用yield 方法返回解析結(jié)果或者調(diào)用回調(diào)方法重新發(fā)起請求 而不能用return方法,items.py創(chuàng)建類來接受字段, middlewares.py里通過構(gòu)建中間件來修改request和response攜帶的請求數(shù)據(jù),pipelines.py文件里定義管道文件,進(jìn)行數(shù)據(jù)過濾,settings.py里有各種配置,如 是否遵守rebot協(xié)議,全局的請求頭,啟用中間鍵和加載自定義中間件
爬蟲文件中回調(diào)方法scrapy.Request中可也設(shè)置dont_filter表示是否會對已經(jīng)發(fā)起過得請求再次發(fā)起請求,默認(rèn)為false表示不過濾,去重
通用爬蟲的爬蟲文件創(chuàng)建方法為 scrapy genspider -t crawl 爬蟲名稱 域名
通用爬蟲使用rules屬性來決定爬蟲的爬取規(guī)則,并將匹配后的url請求提交給引擎,完成后續(xù)的爬取工作。
rules規(guī)則屬性的參數(shù):是一個元組,可以放多個Rule對象
創(chuàng)建Rule:
LinkExtract:設(shè)置提取規(guī)則
allow:里面跟正則,符合正則就提取
deny:里面跟正則,符合正則就不提取
allow_domea:表示會提取的域
deny_domea:表示不會提取的域
restrict_xpath:指定xpath匹配到的區(qū)域進(jìn)行提取url
restrict_css:指定css匹配到的區(qū)域進(jìn)行提取url
callback:設(shè)置回調(diào)函數(shù)
follow:是否跟進(jìn)
process_links:設(shè)置一個函數(shù),根據(jù)正則規(guī)則獲取的url,可以在回調(diào)函數(shù)中獲取
process_request:設(shè)置一個函數(shù),可以在這個回調(diào)方法中攔截所有根據(jù)正則規(guī)則獲取到的url構(gòu)建的request對象
通用爬蟲使用時注意:
1.設(shè)置回調(diào)的時候一定不能重寫parse方法
2.要獲取起始url的響應(yīng)結(jié)果,必須重寫 parse_start_url
3.在設(shè)置Rule對象的時候,如果沒有callback回調(diào)函數(shù),默認(rèn)表示跟進(jìn)
什么情況下會使用通用爬蟲
提取的目標(biāo)網(wǎng)站的網(wǎng)址很有規(guī)律,并且各個模塊很清晰
scrapy的request和response一般通過自定義中間件來添加請求頭,設(shè)置用戶代理,添加請求頭來反反爬蟲