Python Scrapy爬蟲框架使用示例淺析
示例
下面是一個簡單的Python爬蟲Scrapy框架代碼示例,該代碼可以抓取百度搜索結果頁面中指定關鍵字的鏈接和標題等信息:
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
具體說明
首先定義瞭一個名為"BaiduSpider"的Spider類,繼承自scrapy.Spider。其中name屬性表示該爬蟲的名稱,allowed_domains屬性表示可抓取的域名范圍,start_urls屬性則列出瞭需要抓取頁面的初始URL地址。
在類中定義瞭一個名為"parse"的方法,用於處理抓取到的網頁內容。在該方法中使用CSS選擇器語法來提取頁面中我們需要的信息,例如抓取標簽下的鏈接和標題。
在parse方法中構造瞭一個dict類型的item對象,包含瞭每個鏈接對應的標題和URL地址。
最後,使用yield語句將item對象生成並返回,使得Scrapy框架將其轉化為CSV、JSON或XML等格式的數據並保存在磁盤上。
該示例隻是Scrapy框架代碼的冰山一角,實際上Scrapy提供瞭大量的模塊和工具類,例如Item、Pipeline、Downloader等組件,可協助完成頁面解析、數據清洗、存儲等操作。因此,在使用Scrapy進行爬蟲開發時,需要仔細閱讀官方文檔,熟悉其API接口和機制。
Scrapy框架爬蟲使用代理ip
在Scrapy框架中使用代理IP進行網絡爬取,需要先定義一個Downloader Middleware,用於向請求中添加代理。需要註意的是,代理服務器必須支持HTTP協議,否則無法正常工作。以下是一個基本的Scrapy爬蟲代理IP使用示例:
在settings.py中添加如下配置項:
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400, 'my_project.middlewares.ProxyMiddleware': 410, }
其中’scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware’是Scrapy默認提供的下載器中間件,它可以自動從settings.py文件中獲取代理的信息;'my_project.middlewares.ProxyMiddleware’是我們自定義的下載器中間件,用來設置代理。
在項目目錄下創建一個新的Python腳本middlewares.py,定義ProxyMiddleware類:
import random class ProxyMiddleware(object): # 代理服務器地址列表 def __init__(self, proxy_list): self.proxies = proxy_list @classmethod def from_crawler(cls, crawler): return cls( proxy_list=crawler.settings.getlist('PROXY_LIST') ) # 每次請求執行該方法,隨機從代理池中選取一個代理發送請求 def process_request(self, request, spider): proxy = random.choice(self.proxies) request.meta['proxy'] = proxy print('Use proxy: ', proxy)
其中proxy_list是代理服務器的地址列表,需要在settings.py文件中定義為配置項,如下所示:
PROXY_LIST = [ 'http://123.45.67.89:8080', 'http://123.45.67.90:8080', # ... ]
最後,在爬蟲啟動前需要指定運行命令時使用的設置文件和代理池地址,例如:
scrapy crawl my_spider -s PROXY_LIST='proxy_list.txt'
其中proxy_list.txt文件包含瞭代理服務器地址,每一行一個,例如:
http://123.45.67.89:8080
http://123.45.67.90:8080
這樣,在進行網絡請求時就可以自動使用隨機的代理地址發送請求,提高爬蟲數據抓取的效率和可靠性。
到此這篇關於Python Scrapy爬蟲框架使用示例淺析的文章就介紹到這瞭,更多相關Python Scrapy內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python爬蟲Scrapy框架IP代理的配置與調試
- 一文讀懂python Scrapy爬蟲框架
- Scrapy 之中間件(Middleware)的具體使用
- scrapy-splash簡單使用詳解
- 爬蟲進階-JS自動渲染之Scrapy_splash組件的使用