目標(biāo):抓取房源name、price、url
我們采用Scrapy框架幻梯,并用Pyquery解析
廢話(huà)不多說(shuō),先上結(jié)果努释、步驟與代碼:
步驟:
進(jìn)入工作目錄后碘梢,建立一個(gè)爬蟲(chóng)工程:在命令行輸入?scrapy startproject City_58
使用cd City_58進(jìn)入項(xiàng)目目錄
在工程中產(chǎn)生一個(gè)scrapy爬蟲(chóng):在命令行輸入scrapy genspider City_58_test 58.com
訪(fǎng)問(wèn)58同城網(wǎng)站,打開(kāi)開(kāi)發(fā)者工具伐蒂,查看elements
查找含有目標(biāo)信息的元素煞躬,提取目標(biāo)網(wǎng)頁(yè)的url,填入新建的Scrapy項(xiàng)目中Spider文件下的start_url中逸邦,并編寫(xiě)Spider
編寫(xiě)Items(用于定義需要爬取的字段)和Pipeline(處理Item)兩個(gè)文件恩沛,以及修改setting文件(啟動(dòng)管道),創(chuàng)建main文件
運(yùn)行main文件缕减,啟動(dòng)Scrapy爬蟲(chóng)
代碼如下:
Citems.py:定義我們所要爬取的信息的相關(guān)屬性雷客,此例中需要爬取的是name、price桥狡、url
City_58_test.py:主要是用于定義請(qǐng)求鏈接搅裙,并使用pyquery選取目標(biāo)元素
pipeline.py:當(dāng)item數(shù)據(jù)被city58_test爬蟲(chóng)爬取好并返回給引擎以后,引擎會(huì)把item交給City58Pipeline這個(gè)管道處理裹芝。這個(gè)pipeline文件負(fù)責(zé)打開(kāi)關(guān)閉文件部逮,并寫(xiě)入文件
settings.py:開(kāi)啟City58Pipeline管道與robots協(xié)議
main.py:運(yùn)行爬蟲(chóng)
各文件詳情:
items.py
Items
Item使用簡(jiǎn)單的class定義語(yǔ)法以及Field對(duì)象來(lái)聲明
Item 對(duì)象是種簡(jiǎn)單的容器,保存了爬取到得數(shù)據(jù)
City_58_test.py
這個(gè)一個(gè)基本的scrapy的spider的model嫂易,首先我們要導(dǎo)入Scrapy.spiders中的Spider類(lèi)兄朋,以及items.py中我們剛剛定義好的 City58Item
接著創(chuàng)建我們自己的爬蟲(chóng)類(lèi)City58TestSpider并繼承Spider類(lèi)(父與子的關(guān)系)(其他爬蟲(chóng)類(lèi)的使用可以去參考官方文檔)
name
定義spider名字的(string)。spider的名字定義了Scrapy如何定位(并初始化)spider怜械,name是spider最重要的屬性颅和,所以其必須是唯一的傅事。(區(qū)別于City_58)
allowed_domains
可選。包含了spider允許爬取的域名(domain)列表(list)峡扩。 當(dāng) OffsiteMiddleware 啟用時(shí)蹭越, 域名不在列表中的URL不會(huì)被跟進(jìn)
start_urls
URL列表。當(dāng)沒(méi)有制定特定的URL時(shí)有额,spider將從該列表中開(kāi)始進(jìn)行爬取般又。 因此,第一個(gè)被獲取到的頁(yè)面的URL將是該列表之一巍佑。 后續(xù)的URL將會(huì)從獲取到的數(shù)據(jù)中提取茴迁。
parse(response)
parse 負(fù)責(zé)處理response并返回處理的數(shù)據(jù)以及跟進(jìn)的UR
pipeline.py
添加__init__方法,管道事件第一次執(zhí)行時(shí)萤衰,創(chuàng)建58.csv文件堕义,并打開(kāi)
修改process_item方法,將City58TestSpider中獲得的item數(shù)據(jù)存到demo.json文件中
添加colse_spider方法脆栋,管道事件結(jié)束時(shí)倦卖,關(guān)閉文件
settings.py
取消ITEM_PIPELINES的的注釋?zhuān)擁?xiàng)定義了管道的優(yōu)先級(jí),數(shù)值越小優(yōu)先級(jí)越高
修改ROBOTSTXT_OBEY為false椿争,避免某些網(wǎng)站禁止爬蟲(chóng)導(dǎo)致不能爬取數(shù)據(jù)
main.py
這文件需自己創(chuàng)建
City_58_Test乃爬蟲(chóng)名(區(qū)別項(xiàng)目名與爬蟲(chóng)名)
總結(jié):
剛學(xué)習(xí)scrapy怕膛,不用太糾結(jié)于細(xì)節(jié),最好先明白各文件之間的邏輯
這里用到很多類(lèi)與函數(shù)的語(yǔ)法秦踪,不明白處褐捻,可先看上篇文章哦
Pyquery也是一個(gè)易學(xué)且強(qiáng)大的解析神器,直接pip install pyquery安裝
近來(lái)課程設(shè)計(jì)與畢業(yè)設(shè)計(jì)的準(zhǔn)備花費(fèi)了很多時(shí)間椅邓,很久沒(méi)有更新柠逞,還望大家諒解
有不清楚的地方,大家可以留言景馁,點(diǎn)贊板壮,我看到了,會(huì)第一時(shí)間回復(fù)你