---恢復內容開始---
任務分析:
找到一個老司機網站,抓取這個網站上所有磁力鏈接保存到本地。
這次的任務是一個多級頁面的爬取處理。
知識點分析:
scrapy框架,Request方法,yield方法,xpath()
操作步驟:
1、找到一個確實可以爬取的老司機網站(這步最難。。。
2、利用xpath()抓取主頁面所有title下的名字和url,再把相對url組合成絕對url傳給下一個函數進行抓取鏈接的工作。
部分代碼:
基於python3X
(我不會透露自己的老司機網站的..
1.創建project
scrapy startproject jav
2.編寫items
import scrapy class JavItem(scrapy.Item): name=scrapy.Field() #資源的名字 urls=scrapy.Field() #連接 lianjie = scrapy.Field()#磁力鏈接
3.修改settings
雖然大部分老司機網站沒有反爬機制,但是照顧到其他老司機的生理需求,還是做一個有素質的爬蟲吧!
DOWNLOAD_DELAY = 5
在seetings.py中把DOWNLOAD_DELAY參數改為5(默認是3)
4.spider的編寫
大概的框架:
import scrapy import requests from scrapy.http import Request from jav.items import JavItem class JavSpider(scrapy.Spider): name = "jav" allowed_domains = '***.com' def start_requests(self): for i in range(1,1084): #爬取所有主頁面 if i == 1: url = 'http://www.****.com' else: url= 'http://www.***.com/'+str(i)+'.html' yield Request(url,callback=self.parse_one) def parse_one(self,response): #解析主頁面,獲取相對鏈接和資源的名字 items = [] sites =response.xpath('//table') for each in sites: item =JavItem() item['name']= each.xpath('//tr/td/a/text()').extract() item['urls']= each.xpath('//tr/td[1]/a/@href').extract() items.append(item) for ie in item['urls']: #相對鏈接拼接成絕對鏈接傳給parse_two訪問 url = 'http://www.**.com' + ie yield Request(url,callback=self.parse_two,dont_filter=True) #yield方法,dont_filter置成true是因為下邊會有爬出allowed_domains def parse_two(self,response): item =JavItem() item['lianjie'] = response.xpath('/html/body/div[5]/table[2]/tbody/tr[2]/td/ul/li/a/text()').extract() yield item #這里就是我們要的鏈接啦!我用的是火狐瀏覽器的firebug
5.run spider
cd desktop/jav #切換到目錄,小細節 scrapy crawl jav -o jav.json -t json #用json的格式把所有鏈接保存到本地jav.json下
實驗結果:
每一頁有三十來個,一共有1000+頁,現在還在跑,不過目前打開文件點擊鏈接就可以直接喚起播放器開始播放(逃...
作為一個有素質的爬蟲這點等待是值得的。現在爬了1700多條了,估計到晚上大概應該差不多就好了...
送福利了,車牌號拿好
知識就是力量啊....
注意身體:)
---恢復內容結束---