您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“python爬蟲利器scrapy怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python爬蟲利器scrapy怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用途非常廣泛。
Scrapy 使用了 Twisted(其主要對手是Tornado)異步網絡框架來處理網絡通訊,可以加快我們的下載速度,不用自己去實現異步框架,并且包含了各種中間件接口,可以靈活的完成各種需求。
Scrapy Engine(引擎): 負責Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數據傳遞等。
Scheduler(調度器): 它負責接受引擎發送過來的Request請求,并按照一定的方式進行整理排列,入隊,當引擎需要時,交還給引擎。
Downloader(下載器):負責下載Scrapy Engine(引擎)發送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
Spider(爬蟲):它負責處理所有Responses,從中分析提取數據,獲取Item字段需要的數據,并將需要跟進的URL提交給引擎,再次進入Scheduler(調度器),
Item Pipeline(管道):它負責處理Spider中獲取到的Item,并進行進行后期處理(詳細分析、過濾、存儲等)的地方.
Downloader Middlewares(下載中間件):你可以當作是一個可以自定義擴展下載功能的組件。
Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests)
開發一個簡單爬蟲步驟:
新建項目
scrapy startproject demo
編寫spider
種子url (請求)
解析方法
編寫item
結果數據模型
持久化
編寫pipelines
scrapy.cfg :項目的配置文件 mySpider/ :項目的Python模塊,將會從這里引用代碼 mySpider/items.py :項目的目標文件 mySpider/pipelines.py :項目的管道文件 mySpider/settings.py :項目的設置文件 mySpider/spiders/ :存儲爬蟲代碼目錄
scrapy genspider gitee "gitee.com"
通常我們解析都會涉及到 xpath csspath 正則,有的時候可能還有jsonpath(python中json訪問基本不用使用復雜的jsonpath,字典訪問就可以)
scrapy 內置xpath和csspath支持
而解析器本身也可以單獨使用
xpath()
extract_first()
extract() #返回一個列表
索引訪問,因為scrapy.selector.unified.SelectorList繼承list,可以通過索引訪問
from scrapy import Selector if __name__ == '__main__': body = """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>hello</p> <p>hello</p> </body> </html>""" s = Selector(text=body) title=s.xpath("//title/text()").extract_first();#抽取 print(title) #Title pe = s.xpath("//p") print(s.xpath("//p").extract()) #['<p>hello</p>', '<p>hello</p>'] print(pe) #[<Selector xpath='//p' data='<p>hello</p>'>, <Selector xpath='//p' data='<p>hello</p>'>] print(type(pe)) #<class 'scrapy.selector.unified.SelectorList'> print(type(pe[0])) #通過索引訪問 #<class 'scrapy.selector.unified.Selector'> print(type(pe.pop())) #<class 'scrapy.selector.unified.Selector'> p=s.xpath("//p").extract_first() print(p)
css()
css選擇器我們::text選擇內容,用::attr() 選擇屬性
print(s.css("title").extract_first()) print(s.css("title::text").extract_first()) print(s.css("title::text").extract()) print(s.css("p.big::text").extract_first()) print(s.css("p.big::attr(class)").extract_first()) # <title>Title</title> # Title # ['Title'] # hello big # big
css()和xpath()混用scrapy.selector.unified.SelectorList
scrapy.selector.unified.Selector
本身有css和xpath方法,所以可以組合使用
print(s.xpath("//body").css("p.big").extract_first()) print(s.css("body").xpath("//p[@class='big']").extract_first()) # <p>hello big </p> # <p>hello big </p>
re()和re_first()scrapy.selector.unified.SelectorList
scrapy.selector.unified.Selector
擁有 re()
方法,支持通過正則來過濾
print(s.xpath("//p/text()").re_first("big")) print(type(s.xpath("//p/text()").re("big"))) # big # <class 'list'>
** 但re()返回列表,.re_first返回str,所以不能再繼續調用其他的選擇方法
response對象已經
class GiteeSpider(scrapy.Spider): name = 'gitee' allowed_domains = ['gitee.com'] start_urls = ['https://gitee.com/haimama'] def parse(self, response): print(type(response)) t=response.xpath("//title/text()").extract_first() print(t) ##啟動爬蟲執行后的結果 # 執行結果省略日志 # <class 'scrapy.http.response.html.HtmlResponse'> # 碼馬 (haimama) - Gitee
response對象類型為 scrapy.http.response.html.HtmlResponse
,該類繼承TextResponse
。擁有xpath()和css()方法如下
所以response 可以直接使用前文中的Selector 的方式來解析
def xpath(self, query, **kwargs): return self.selector.xpath(query, **kwargs) def css(self, query): return self.selector.css(query)
settings.py是爬蟲的配置文件,要正常啟動爬蟲的話,一定注意將robo協議限制 修改為 ROBOTSTXT_OBEY = False
其他相關配置,我們下節再介紹
在爬蟲目錄編寫run.py方法,添加如下腳本,這樣就可以直接執行爬蟲了。如果命令行執行的話scrapy crawl gitee
。其中gitee為爬蟲名,對應GiteeSpider
中的name
字段
# coding: utf-8 from scrapy import cmdline if __name__ == '__main__': cmdline.execute("scrapy crawl gitee".split()) # scrapy crawl gitee
讀到這里,這篇“python爬蟲利器scrapy怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。