介紹
Scrapy是一個用Python編寫的高級Web抓取框架,可以幫助我們快速、簡單地從網站抓取數據。
在這個教程中,我們將介紹如何使用Scrapy發送請求獲取網頁內容。這個過程包括使用Scrapy的一個名為Spider的功能,來定義需要抓取的URL列表,以及如何使用Scrapy發送HTTP請求,來獲取網頁內容。
定義一個Scrapy Spider
要開始使用Scrapy發送請求獲取網頁內容,我們必須首先定義一個Scrapy Spider。
每個Scrapy Spider定義了一組要抓取的URL,以及如何解析這些URL所對應的HTML。
在下面的示例中,我們將定義一個Scrapy Spider,該Spider將從一個網站抓取數據。
首先,我們需要創建一個新的Scrapy項目。要創建一個新的Scrapy項目,請打開命令行,轉到要保存項目的目錄,然後運行下面的命令:
scrapy startproject myproject
接下來,我們需要在項目中創建一個新的Spider。要創建一個新的Spider,請運行以下命令:
cd myproject
scrapy genspider example example.com
這將在myproject/spiders文件夾中創建一個名為example.py的新文件,其中包含一個名為ExampleSpider的Scrapy Spider。
定義要抓取的URL列表
一旦我們有了一個Scrapy Spider,我們就可以開始定義要抓取的URL列表。
要將要抓取的URL添加到Scrapy Spider中,請在Spider的start_requests()方法中添加它們。可以按以下方式完成此操作:
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = ["http://www.example.com"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, callback=self.parse)
在上面的示例中,我們將http://www.example.com添加到我們要抓取的URL列表中。我們使用start_requests()方法來觸發HTTP請求,並指定HTTP響應返回後應調用的回調方法。
在這種情況下,parse()方法是我們要使用的回調方法。在解析所請求的HTML時,我們將在這個方法中執行任何操作。
發送HTTP請求
有了start_requests()方法,我們可以使用Scrapy發送HTTP請求來獲取網頁內容。可以通過如下方式發送HTTP請求:
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = ["http://www.example.com"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, callback=self.parse)
def parse(self, response):
# Do something with the response, like extracting data.
在上面的示例中,我們使用Scrapy的Request()對象來發送HTTP請求。我們指定要請求的URL以及請求完成後要調用的回調方法。
我們還可以指定其他請求參數,例如User-Agent和Cookie。例如,要在請求中添加User-Agent標頭,請使用:
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = ["http://www.example.com"]
def start_requests(self):
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"}
for url in self.start_urls:
yield scrapy.Request(url, headers=headers, callback=self.parse)
在上面的示例中,我們使用headers參數來指定User-Agent標頭。這個標頭告訴服務器我們使用的是一個Web瀏覽器,而不是一個自動化工具。
處理HTTP響應
一旦我們發送了HTTP請求並收到了相應的響應,我們需要解析響應並提取所需的數據。
為此,我們可以將解析代碼放在parse()方法中,並使用Scrapy提供的一些有用的方法來提取數據。
例如,下面是一個從網頁中提取標題文本的示例代碼:
def parse(self, response):
title_text = response.xpath('//title/text()').extract_first()
print(title_text)
在這個示例中,我們使用XPath選擇器來提取網頁中的標題文本。我們使用extract_first()方法來提取第一個匹配項。
使用Scrapy Shell進行網頁調試
如果我們希望測試代碼或確定響應是否包含我們需要的數據,可以使用Scrapy Shell。
Scrapy Shell是交互式Python解釋器,允許我們與網頁交互,並嘗試使用Scrapy提供的方法來提取數據。
要使用Scrapy Shell,請運行以下命令:
scrapy shell http://www.example.com
在這個示例中,我們將Scrapy Shell用於http://www.example.com。我們可以開始與這個網頁交互,並嘗試使用Scrapy提供的方法來提取所需的數據。
例如,我們可以使用以下命令來提取網頁中的標題:
response.xpath('//title/text()').extract_first()
總結
在這個Scrapy教程中,我們介紹了如何使用Scrapy發送請求獲取網頁內容。
我們涵蓋了以下主題:
- 定義一個Scrapy Spider
- 定義要抓取的URL列表
- 發送HTTP請求
- 處理HTTP響應
我們還介紹了如何使用Scrapy Shell進行網頁調試。通過遵循這個教程,我們可以使用Scrapy快速、簡單地從網站獲取數據。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/241209.html