1. 程式人生 > 實用技巧 >02.Scrapy-Demo

02.Scrapy-Demo

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)處理
# 注意:回撥函式不要寫() 只寫方法名字