02.Scrapy-Demo
阿新 • • 發佈:2020-06-24
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[@class="next_page"]/@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)處理
# 注意:回撥函式不要寫() 只寫方法名字