Python Scrapy爬蟲框架使用示例淺析
示例
下面是一個(gè)簡(jiǎn)單的Python爬蟲Scrapy框架代碼示例,該代碼可以抓取百度搜索結(jié)果頁(yè)面中指定關(guān)鍵字的鏈接和標(biāo)題等信息:
import scrapy class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['www.baidu.com'] start_urls = ['http://www.baidu.com/s?wd=python'] def parse(self, response): for link in response.css('h3 a'): item = {'title': link.css('::text').get(), 'link': link.attrib['href']} yield item
具體說(shuō)明
首先定義了一個(gè)名為"BaiduSpider"的Spider類,繼承自scrapy.Spider。其中name屬性表示該爬蟲的名稱,allowed_domains屬性表示可抓取的域名范圍,start_urls屬性則列出了需要抓取頁(yè)面的初始URL地址。
在類中定義了一個(gè)名為"parse"的方法,用于處理抓取到的網(wǎng)頁(yè)內(nèi)容。在該方法中使用CSS選擇器語(yǔ)法來(lái)提取頁(yè)面中我們需要的信息,例如抓取標(biāo)簽下的鏈接和標(biāo)題。
在parse方法中構(gòu)造了一個(gè)dict類型的item對(duì)象,包含了每個(gè)鏈接對(duì)應(yīng)的標(biāo)題和URL地址。
最后,使用yield語(yǔ)句將item對(duì)象生成并返回,使得Scrapy框架將其轉(zhuǎn)化為CSV、JSON或XML等格式的數(shù)據(jù)并保存在磁盤上。
該示例只是Scrapy框架代碼的冰山一角,實(shí)際上Scrapy提供了大量的模塊和工具類,例如Item、Pipeline、Downloader等組件,可協(xié)助完成頁(yè)面解析、數(shù)據(jù)清洗、存儲(chǔ)等操作。因此,在使用Scrapy進(jìn)行爬蟲開發(fā)時(shí),需要仔細(xì)閱讀官方文檔,熟悉其API接口和機(jī)制。
Scrapy框架爬蟲使用代理ip
在Scrapy框架中使用代理IP進(jìn)行網(wǎng)絡(luò)爬取,需要先定義一個(gè)Downloader Middleware,用于向請(qǐng)求中添加代理。需要注意的是,代理服務(wù)器必須支持HTTP協(xié)議,否則無(wú)法正常工作。以下是一個(gè)基本的Scrapy爬蟲代理IP使用示例:
在settings.py中添加如下配置項(xiàng):
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400, 'my_project.middlewares.ProxyMiddleware': 410, }
其中’scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware’是Scrapy默認(rèn)提供的下載器中間件,它可以自動(dòng)從settings.py文件中獲取代理的信息;'my_project.middlewares.ProxyMiddleware’是我們自定義的下載器中間件,用來(lái)設(shè)置代理。
在項(xiàng)目目錄下創(chuàng)建一個(gè)新的Python腳本middlewares.py,定義ProxyMiddleware類:
import random class ProxyMiddleware(object): # 代理服務(wù)器地址列表 def __init__(self, proxy_list): self.proxies = proxy_list @classmethod def from_crawler(cls, crawler): return cls( proxy_list=crawler.settings.getlist('PROXY_LIST') ) # 每次請(qǐng)求執(zhí)行該方法,隨機(jī)從代理池中選取一個(gè)代理發(fā)送請(qǐng)求 def process_request(self, request, spider): proxy = random.choice(self.proxies) request.meta['proxy'] = proxy print('Use proxy: ', proxy)
其中proxy_list是代理服務(wù)器的地址列表,需要在settings.py文件中定義為配置項(xiàng),如下所示:
PROXY_LIST = [ 'http://123.45.67.89:8080', 'http://123.45.67.90:8080', # ... ]
最后,在爬蟲啟動(dòng)前需要指定運(yùn)行命令時(shí)使用的設(shè)置文件和代理池地址,例如:
scrapy crawl my_spider -s PROXY_LIST='proxy_list.txt'
其中proxy_list.txt文件包含了代理服務(wù)器地址,每一行一個(gè),例如:
http://123.45.67.89:8080
http://123.45.67.90:8080
這樣,在進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí)就可以自動(dòng)使用隨機(jī)的代理地址發(fā)送請(qǐng)求,提高爬蟲數(shù)據(jù)抓取的效率和可靠性。
到此這篇關(guān)于Python Scrapy爬蟲框架使用示例淺析的文章就介紹到這了,更多相關(guān)Python Scrapy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
升級(jí)keras解決load_weights()中的未定義skip_mismatch關(guān)鍵字問題
這篇文章主要介紹了升級(jí)keras解決load_weights()中的未定義skip_mismatch關(guān)鍵字問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-06-06Django form表單與請(qǐng)求的生命周期步驟詳解
這篇文章主要介紹了Django-form表單與請(qǐng)求的生命周期,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06利用Python腳本實(shí)現(xiàn)ping百度和google的方法
最近在做SEO的時(shí)候,為了讓發(fā)的外鏈能夠快速的收錄,想到了利用ping的功能,google和百度都有相關(guān)的ping介紹,有興趣的朋友可以去看看相關(guān)的知識(shí)。下面這篇文章主要介紹了利用Python腳本實(shí)現(xiàn)ping百度和google的方法,需要的朋友可以參考借鑒,一起來(lái)看看吧。2017-01-01Python讀取Ansible?playbooks返回信息示例解析
這篇文章主要為大家介紹了Python讀取Ansible?playbooks返回信息示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-02-02python基于mysql實(shí)現(xiàn)的簡(jiǎn)單隊(duì)列以及跨進(jìn)程鎖實(shí)例詳解
這篇文章主要介紹了python基于mysql實(shí)現(xiàn)的簡(jiǎn)單隊(duì)列以及跨進(jìn)程鎖,需要的朋友可以參考下2014-07-07Windows下pycharm創(chuàng)建Django 項(xiàng)目(虛擬環(huán)境)過程解析
這篇文章主要介紹了Windows下pycharm創(chuàng)建Django 項(xiàng)目(虛擬環(huán)境)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09