安裝Scrapy,pip install Scrapy。因?yàn)橹鞍惭b的各種坑都遇到了蟹略,這里安裝不會(huì)再出錯(cuò)了
創(chuàng)建爬蟲項(xiàng)目
在DOS界面中用CD命令切換到存儲(chǔ)位置
然后運(yùn)行命令:scrapy startproject csdnSpider ,回車
可以創(chuàng)建項(xiàng)目csdnSpider捧存,csdnSpider文件夾下有如下文件
簡(jiǎn)單介紹一下文件功能
scrapy.cfg 項(xiàng)目部署文件
csdnSpider/:
csdnSpider/:items.py 這里主要是做爬蟲提取字段
csdnSpider/:pipelines.py 對(duì)爬蟲字段的進(jìn)一步處理,如去重洒敏,清洗,入庫(kù)
csdnSpider/:settings.py 項(xiàng)目的配置文件
csdnSpider/:spiders.py 這里主要做爬蟲操作
創(chuàng)建爬取模塊
爬蟲模塊的代碼都放置于spiders文件夾中疙驾,用于從單個(gè)或多個(gè)網(wǎng)站爬取數(shù)據(jù)的類凶伙,其應(yīng)該包含初始頁(yè)面的URL,以及跟進(jìn)網(wǎng)頁(yè)的鏈接它碎,分析頁(yè)內(nèi)容是提取數(shù)據(jù)的函數(shù)函荣,創(chuàng)建一個(gè)Spider類,需要繼承scrapy.Spider類扳肛,并且定義三個(gè)屬性:
name:用于區(qū)別Spider,必須是唯一的
start_urls:啟動(dòng)時(shí)爬取入口的URL列表傻挂,后續(xù)的URL響應(yīng)后返回的Response對(duì)象
parse():會(huì)作為唯一的參數(shù)傳遞給該方法,該方法負(fù)責(zé)解析返回的數(shù)據(jù)(reponse data),提取數(shù)據(jù)(生成item)以及生成需要進(jìn)一步處理的URL的Response對(duì)象
用Pycharm打開我們剛創(chuàng)建的csdnsoider項(xiàng)目,編寫爬蟲模塊代碼:
import scrapy
class csdnspider(scrapy.Spider): # 必須繼承scrapy.Spider
name = "csdn" #爬蟲名稱,這個(gè)名稱必須是唯一的
allowed_domains=["csdn.net"] #允許的域名
start_urls = [
"https://www.csdn.net/nav/ai"
]
def parse(self, response):
# 實(shí)現(xiàn)網(wǎng)頁(yè)的解析
pass
然后調(diào)用挖息,在命令行中進(jìn)入目錄csdnSpider中金拒,注意這里應(yīng)該是于scrapy.cfg同級(jí),運(yùn)行命令:scrapy crawl csdn 其中csdn是我們剛才在爬蟲模塊定義的name,爬蟲文件建立在spiders文件夾下
效果圖:
這樣就創(chuàng)建成功了
解析Html字段(提取爬蟲字段)
之前的xpath與css已經(jīng)講過(guò)套腹,這里說(shuō)一下Selector用法绪抛,Selector對(duì)象有四個(gè)基本方法:
1、xpath(queery) 返回表達(dá)式所對(duì)應(yīng)的所有人節(jié)點(diǎn)的selector list列表电禀。
2幢码、css(query)返回表達(dá)式所對(duì)應(yīng)的所有人節(jié)點(diǎn)的selector list列表。
3尖飞、extract()序列化節(jié)點(diǎn)為UNicode字符串并返回列表症副。
4、re(regex)根據(jù)傳入的正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行提取政基,返回一個(gè)Unicode字符串列表贞铣。
在csdnspider類的parse()方法中,其中一個(gè)參數(shù)是reponse,將reponse傳入的Selector(reponse)中就可以構(gòu)造出一個(gè)Selector對(duì)象沮明。
小技巧:我們?cè)谂老x的時(shí)候咕娄,更多的是對(duì)爬取字段的表達(dá)式構(gòu)造。Scrapy提供了一種簡(jiǎn)便的方式來(lái)查看表達(dá)式是否正確有效珊擂。
新打開一個(gè)命令窗口:輸入E:\work\my_python\csdnSpider>scrapy shell"https://www.csdn.net/nav/ai"
效果圖:
接著直接輸入:response.xpath('//*[@id="feedlist_id"]/li[1]/div/div[1]/h2/a/text()').extract()
效果圖:
爬取字段代碼
import scrapy
class csdnspiderpage(scrapy.Spider):
name = "csdn"
allowed = ["csdn.net"]
start_urls = [
'https://www.csdn.net/nav/ai'
]
def parse(self, response):
datas = response.xpath('//*[@id="feedlist_id"]/li/div')
for data in datas:
read_count = data.xpath('./div[1]/h2/a/text()').extract()
read_count = read_count[0] if len(read_count) > 0 else ''
print(read_count.strip())
pass
在終端輸入
scrapy crawl csdn
報(bào)錯(cuò)”No module named 'win32api'“
解決辦法圣勒,Dos
pip install pypiwin32
pycharm 安裝pypiwin32庫(kù)
運(yùn)行效果
總結(jié)
scrapy 框架非常強(qiáng)大费变,初步接觸感覺到了他的便利和效率。今天學(xué)習(xí)的過(guò)程也是在磕磕碰碰圣贸,從寒大的寫錯(cuò)命令開始挚歧,到我不知道在哪里建立spider。如何執(zhí)行spider遇到了種種問(wèn)題吁峻。
在打開終端的時(shí)候打開的位置上默認(rèn)開啟的項(xiàng)目滑负,cd起來(lái)其實(shí)挺麻煩的,這里我們就修改一下用含,每次手動(dòng)打開項(xiàng)目矮慕。這里可以修改一下設(shè)置:
File -> setting -> Appearance&Behavior -> System Setting -> Startup/Shutdown
取消 Reopen last project on startup 這個(gè)選項(xiàng)就好了
這樣終端打開為當(dāng)前項(xiàng)目位置