Scrapy入門實戰
采集目標:采集西祠網的IP代理 包括 IP PORT
1. 新建專案
scrapy startproject xicidailiSpider
# scrapy 新建專案 專案名
2. 創建爬蟲
scrapy genspider xicidaili xicidaili.com
# scrapy 產生爬蟲 爬蟲名字 網站域名
# 注意:爬蟲名字一定不能與專案名字一致!


可以看到,在專案的spiders下得到了一個爬蟲檔案
解釋爬蟲檔案
import scrapy # 匯入scrapy
# 創建爬蟲類 并且繼承自scrapy.Spider --> 爬蟲最基礎的類
# 另外幾個類都是繼承自這個類
class XicidailiSpider(scrapy.Spider):
#爬蟲名字 --> 必須唯一
name = 'xicidaili'
# 允許采集的域名
allowed_domains = ['xicidaili.com']
# 開始采集的網站
start_urls = ['http://xicidaili.com/']
# 決議回應資料 提取資料 或者網址等 response就是網頁原始碼
def parse(self, response):
pass
3. 分析網址
-
提取資料
- 正則運算式(基礎 必回 難掌握)
- XPath --> 從HTML中提取資料語法
- CSS --> 從HTML中提取資料語法
-
response.xpath("xpath語法").get()
get() 是得到一個元素
getall() 是多個元素
class XicidailiSpider(scrapy.Spider): name = 'xicidaili' allowed_domains = ['xicidaili.com'] start_urls = ['https://www.xicidaili.com/nn/'] # start_urls = [f'https://www.xicidaili.com/nn/{page}' for page in range(1,3685)] def parse(self, response): # 提取資料 # response.xpath("//tr/td[2]/text()") selectors = response.xpath("//tr") for selector in selectors: ip = selector.xpath("./td[2]/text()").get() # . 在當前節點下繼續選擇 port = selector.xpath("./td[3]/text()").get() # ip = selector.xpath("./td[2]/text()").extract_first() # 與get等價 # port = selector.xpath("./td[3]/text()").extract_first() print(ip,port)
4. 運行爬蟲
scrapy crawl 爬蟲名字
# 翻頁操作
next_page = response.xpath('//a[@]/@href').get()
if next_page:
print(next_page)
# 拼接網址
next_url = response.urljoin(next_page)
yield scrapy.Request(next_url,callback=self.parse) # yield 生成器
# Request() 發送請求 類似requests.get()
# callback 是回呼函式 將發出去的請求得到的回應還交給自己(self.parse)處理
# 注意:回呼函式不要寫() 只寫方法名字
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110801.html
標籤:Python
上一篇:01.Scrapy-入門
