scrapy的基本用法
- 通過(guò)命令創(chuàng)建項(xiàng)目
scrapy startproject 項(xiàng)目名稱(chēng) - 用pycharm打開(kāi)項(xiàng)目
- 通過(guò)命令創(chuàng)建爬蟲(chóng)
scrapy genspider 爬蟲(chóng)名稱(chēng) 域名 - 配置settings
robots_obey=False
Download_delay=0.5
Cookie_enable=False - 自定義UserAgentMiddleWare
可以直接粘現(xiàn)成的 - 開(kāi)始解析數(shù)據(jù)
- 先規(guī)劃一下需要幾個(gè)函數(shù)
- 函數(shù)1跳轉(zhuǎn)到函數(shù)2使用 yield scrapy.Request(url,callback,meta,dont_filter)
- 將數(shù)據(jù)封裝到items,記得yield item
- 自定義pipelines將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)/文件中
框架總結(jié):
scrapy執(zhí)行命令:scrapy crawl (爬蟲(chóng)文件名稱(chēng))
創(chuàng)建項(xiàng)目 scrapy startproject + 項(xiàng)目名稱(chēng)
創(chuàng)建爬蟲(chóng)文件 進(jìn)入到spiders 文件夾下 創(chuàng)建爬蟲(chóng)文件 scrapy genspider + 爬蟲(chóng)文件名稱(chēng) + 網(wǎng)站的域
創(chuàng)建好之后打開(kāi) pycharm 選擇虛擬環(huán)境
scrapt 項(xiàng)目的架構(gòu)(框架)
chinaz 項(xiàng)目文件夾
spiders 存放所有的爬蟲(chóng)文件
zzw.py 爬蟲(chóng)文件(解析response 響應(yīng)枚尼,提取目標(biāo)數(shù)據(jù)和url)
items.py 編寫(xiě)要爬取的字段
middiewares.py 中間件(爬蟲(chóng)中間件,下載中間件)
piplines.py 數(shù)據(jù)管道(做數(shù)據(jù)持久化)
settings.py 設(shè)置文件(設(shè)置請(qǐng)求頭,下載延遲)
scrapy.cfg 配置文件(部署項(xiàng)目的時(shí)候會(huì)用到)
yield 的作用就是把一個(gè)函數(shù)變成一個(gè) generator(生成器)筷转,帶有 yield 的函數(shù)不再是一個(gè)普通函數(shù)姑原,Python 解釋器會(huì)將其視為一個(gè) generator,帶有yeild的函數(shù)遇到y(tǒng)eild的時(shí)候就返回一個(gè)迭代值呜舒,下次迭代時(shí)锭汛, 代碼從 yield 的下一條語(yǔ)句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來(lái)和上次中斷執(zhí)行前是完全一樣的袭蝗,于是函數(shù)繼續(xù)執(zhí)行唤殴, 直到再次遇到 yield
#獲取響應(yīng)的狀態(tài)碼
status = response.status
#獲取響應(yīng)的html文本
html_text = response.text
# print(status,len(html_text))
# with open('page.html','w') as file:
# file.write(html_text)
#獲取到響應(yīng)的二進(jìn)制數(shù)據(jù)
# (當(dāng)response.text出現(xiàn)亂碼的時(shí)候,可以拿到二進(jìn)制數(shù)據(jù),進(jìn)行解碼)
b_html = response.body
# print(b_html)
#獲取響應(yīng)頭
response_headers = response.headers
# print('響應(yīng)頭:',response_headers)
#獲取請(qǐng)求頭
request_headers = response.request.headers
# print('請(qǐng)求頭:',request_headers)
# step1:獲取的標(biāo)題和分類(lèi)的url地址
#response.xpath可以直接根據(jù)xptah語(yǔ)法提取目標(biāo)數(shù)據(jù)mZ#category_list = response.xpath('//dl[@class="MaWebClist"]/dd')+response.xpath('//dl[@class="MaWebClist02"]/dd')
#獲取到所有的dd標(biāo)簽,每一個(gè)都是Selector,并且存放在列表里面
category_list = response.xpath('//div[@class="MainWebClass clearfix"]/dl/dd/a')
# print(category_list)
# print(len(category_list))