柚子快報(bào)激活碼778899分享:scrapy快速上手
柚子快報(bào)激活碼778899分享:scrapy快速上手
安裝
????????除了scrapy本身還要安裝兩個庫?
pip install scrapy
pip install pywin32
pip install wheel
?創(chuàng)建項(xiàng)目
在要創(chuàng)建項(xiàng)目的地方打開powershell
scrapy startproject 項(xiàng)目名
我們得到這樣的項(xiàng)目結(jié)構(gòu),功能如下?
? ? ? ? scrapy.cfg? ? ? ? ? ? ? ? 項(xiàng)目的主配置信息? ? ? ? items.py? ? ? ? ? ? ? ? ? ?設(shè)置項(xiàng)目模板,用于結(jié)構(gòu)化數(shù)據(jù)? ? ? ? piplines.py? ? ? ? ? ? ? ? 數(shù)據(jù)的持久化處理? ? ? ? seting? ? ? ? ? ? ? ? ? ? ? ? 配置文件? ? ? ? spiders? ? ? ? ? ? ? ? ? ? ? ?爬蟲文件目錄
配置信息
seeting.py下修改是否支持?jǐn)?shù)據(jù)爬取修改為允許,true不允許,false允許
??
?將這一行的內(nèi)容改為false
配置瀏覽器請求頭中的user-agent
根據(jù)網(wǎng)站反爬措施制定其他的配置?
配置模板
????????items.py中照著給出的格式配置自己的數(shù)據(jù)模板
? ? ? ? 變量名 = scrapy.Field()
創(chuàng)建爬蟲文件
指定爬取目標(biāo)
?回到powershell,
cd 項(xiàng)目名
scrapy genspider 爬蟲文件名 爬取目標(biāo)網(wǎng)址
得到這樣一個文件
import scrapy
class QuotesSpider(scrapy.Spider):
# 爬蟲名
name = "quotes"
allowed_domains = ["quotes.toscrape.com"]
# 爬取目標(biāo)
start_urls = ["https://quotes.toscrape.com/"]
# 爬取動作
def parse(self, response):
尋找元素和內(nèi)容
在parse方法中定義爬取動作?,參數(shù)列表中的response是爬取目標(biāo)的響應(yīng)對象。
具有如下屬性
url:響應(yīng)的 URL 地址。status:HTTP 狀態(tài)碼,如 200 表示成功,404 表示未找到等。headers:響應(yīng)的 HTTP 頭部信息,是一個類似字典的對象。body:響應(yīng)體,即服務(wù)器返回的內(nèi)容,是一個字節(jié)串(bytes)。text:響應(yīng)體的字符串形式,如果響應(yīng)的?Content-Type?是文本類型(如 HTML),則可以直接使用此屬性獲取內(nèi)容。encoding:響應(yīng)的編碼方式,用于將?body?轉(zhuǎn)換為?text。meta:傳遞給響應(yīng)的元數(shù)據(jù)信息,常用于在請求和響應(yīng)之間傳遞數(shù)據(jù)。request:觸發(fā)此響應(yīng)的請求(Request)對象。
具有如下方法
xpath():用xpass尋找元素css():用css尋找元素urljoin():構(gòu)造網(wǎng)址get()?和?getall(): 這兩個方法用于從Selector或SelectorList對象中提取數(shù)據(jù)。get()方法返回第一個匹配節(jié)點(diǎn)的文本或?qū)傩灾担ㄈ绻付藢傩裕?,而getall()方法返回所有匹配節(jié)點(diǎn)的文本或?qū)傩灾盗斜?。extract()?和?extract_first(): 這兩個方法是舊版本Scrapy中用于提取數(shù)據(jù)的方法,但在新版本中,推薦使用get()和getall()方法。extract()方法返回所有匹配節(jié)點(diǎn)的文本列表,而extract_first()方法返回第一個匹配節(jié)點(diǎn)的文本。re(regex, replace_entities=True)?和?re_first(regex, default=None, replace_entities=True): 這兩個方法允許你使用正則表達(dá)式來提取匹配的數(shù)據(jù)。re()方法返回所有匹配的字符串列表,而re_first()方法返回第一個匹配的字符串。attrib: 這是一個屬性字典,用于訪問當(dāng)前節(jié)點(diǎn)的屬性。如果當(dāng)前對象是SelectorList,則attrib將返回列表中第一個元素的屬性字典。
????????使用xpath和css方法尋找元素的時候如果返回多個值的時候添加.extract()返回的是str類型列表,單個值則為.extract_first(),返回的是str類型
text = q.xpath(".//span[@class='text']/text()").extract_first()
author = q.xpath('.//span/small[@class="author"]/text()').extract_first()
tags = q.xpath('.//div[@class="tags"]/a[@class="tag"]').extract()
????????這樣找到的元素可以直接被bs4解析并獲取值。
將結(jié)果組成模板
? ? ? ? 首先導(dǎo)入item,并在要組成模板的位置實(shí)例化一個ScrapydemoItem對象
from scrapydemo.items import ScrapydemoItem
item = ScrapydemoItem()#在你要組成模板的位置寫
?????????為實(shí)例屬性賦值
item["text"] = text
item["author"] = author
item["tags"] = tags
? ? ? ? 結(jié)束爬蟲? ? ? ? yield類似return,但是可以循環(huán)返回
yield item
?????????每返回一個item會寫入一條數(shù)據(jù)
? ? ? ? 當(dāng)然也可以不返回item,獲取到下一個頁面的url即可繼續(xù)訪問下一個頁面
# 獲取訪問下一頁地址
next = response.css('.pager .next .a::attr(href)').extract_first() # 兩個冒號獲取屬性值
# 合成絕對路徑
url = response.urljoin(next)
# 訪問請求的回調(diào)函數(shù)
# 第三個參數(shù)是關(guān)閉地址過濾
yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)
? ? ? ? ?這樣就可以調(diào)用自己繼續(xù)訪問下一頁了
創(chuàng)建啟動項(xiàng)
創(chuàng)建main.py?
from scrapy import cmdline
cmdline.execute("scrapy crawl quotes -o quotes.json".split())
# scrapy crawl 爬蟲名 -o代表文件流 創(chuàng)建quotes.json這個文件
? ? ? ? 也可以在cmd或powershell中輸入字符串中的值?
爬取scrapy官方靶站的示例代碼:
import scrapy
from scrapydemo.items import ScrapydemoItem
class QuotesSpider(scrapy.Spider):
# 爬蟲名
name = "quotes"
allowed_domains = ["quotes.toscrape.com"]
# 爬取目標(biāo)
start_urls = ["https://quotes.toscrape.com/"]
# 爬取動作
def parse(self, response):
# 獲取頁面中的元素返回列表
quote = response.xpath('//div[@class="quote"]')
# 遍歷列表每個元素
for q in quote:
text = q.xpath(".//span[@class='text']/text()").extract_first() # 獲取內(nèi)容
author = q.xpath('.//span/small[@class="author"]/text()').extract_first() # 獲取作者
tags = q.xpath('.//div[@class="tags"]/a[@class="tag"]').extract() # 獲取標(biāo)簽
# 實(shí)例化
item = ScrapydemoItem()
# 為實(shí)例屬性賦值
item["text"] = text
item["author"] = author
item["tags"] = tags
# 返回?cái)?shù)據(jù),相當(dāng)于return,但是可以循環(huán)返回。
yield item
# 獲取訪問下一頁地址
next = response.css('.pager .next .a::attr(href)').extract_first() # 兩個冒號獲取屬性值
# 合成絕對路徑
url = response.urljoin(next)
# 訪問請求的回調(diào)函數(shù)
# 第三個參數(shù)是關(guān)閉地址過濾
yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)
柚子快報(bào)激活碼778899分享:scrapy快速上手
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。