來啦,老弟
創(chuàng)新互聯(lián)主營(yíng)甘州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),甘州h5小程序開發(fā)搭建,甘州網(wǎng)站營(yíng)銷推廣歡迎甘州等地區(qū)企業(yè)咨詢
我們已經(jīng)知道怎么使用
Requests]
進(jìn)行各種請(qǐng)求騷操作
也知道了對(duì)服務(wù)器返回的數(shù)據(jù)如何使用
正則表達(dá)式
來過濾我們想要的內(nèi)容
...
那么接下來
我們就使用 requests 和 re 來寫一個(gè)爬蟲
作為一個(gè)愛看書的你(說的跟真的似的)
怎么能發(fā)現(xiàn)好書呢?
所以我們
爬取當(dāng)當(dāng)網(wǎng)的前 500本好五星評(píng)書籍
怎么樣?
ok
接下來就是
學(xué)習(xí) python 的正確姿勢(shì)
請(qǐng)?jiān)陔娔X的陪同下
邊看本文邊練習(xí)
首先我們要對(duì)我們的目標(biāo)網(wǎng)站進(jìn)行分析
先摸清對(duì)方的底
我們才能戰(zhàn)無不勝
打開這個(gè)書籍排行榜的地址
http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1
我們可以看到是這樣的一個(gè)網(wǎng)頁(yè)
每一頁(yè)顯示 20 本書
當(dāng)我們點(diǎn)擊下一頁(yè)的時(shí)候
你可以發(fā)現(xiàn)地址變了
http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2
也就是我們翻到第幾頁(yè)的時(shí)候
鏈接地址的最后一個(gè)參數(shù)會(huì)跟著變
那么我們等會(huì)在 python 中可以用一個(gè)變量
來實(shí)現(xiàn)獲取不同頁(yè)數(shù)的內(nèi)容
接著
用我們之前說的 Chrome 騷操作
來分析一下
我們要的內(nèi)容是怎么請(qǐng)求的
以及
返回給我們的源代碼是什么樣的
可以看到
我們通過 GET 請(qǐng)求
我們的請(qǐng)求頭
這是服務(wù)器返回來的數(shù)據(jù)
接著我們?cè)賮矸治鲆幌挛覀円ト〉年P(guān)鍵信息
我們要的就是前 500 本書的
排名
書名
圖片地址
作者
推薦指數(shù)
五星評(píng)分次數(shù)
價(jià)格
通過源碼我們可以看到
這些信息被放在了
那么我們等會(huì)就可以使用
來進(jìn)行過濾我們要的信息
一頓分析完了之后
接下來擼代碼了
主要思路
使用 page 變量來實(shí)現(xiàn)翻頁(yè)
我們使用 requests 請(qǐng)求當(dāng)當(dāng)網(wǎng)
然后將返回的 HTML 進(jìn)行正則解析
由于我們暫時(shí)還沒學(xué)到數(shù)據(jù)庫(kù)
所以解析完之后就把內(nèi)容存到文件中。學(xué)習(xí)過程中有不懂的可以加入我們的學(xué)習(xí)交流秋秋圈784中間758后面214,與你分享Python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)Python,和學(xué)習(xí)什么內(nèi)容。相關(guān)學(xué)習(xí)視頻資料、開發(fā)工具都有分享
?
def main(page):
url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(page)
html = request_dandan(url)
items = parse_result(html) # 解析過濾我們想要的信息
for item in items:
write_item_to_file(item)
?
請(qǐng)求當(dāng)當(dāng)網(wǎng)
當(dāng)我們請(qǐng)求成功之后
拿到源代碼
?
def request_dandan(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
except requests.RequestException:
return None
?
拿到源代碼了
就要對(duì)其解析
使用正則表達(dá)式獲取我們想要的關(guān)鍵信息
獲取到了之后我們封裝一下數(shù)據(jù)
?
def parse_result(html):
pattern = re.compile('.*?list_num.*?(\d+).
¥(.*?).*?',re.S) items = re.findall(pattern,html) for item in items: yield { 'range': item[0], 'iamge': item[1], 'title': item[2], 'recommend': item[3], 'author': item[4], 'times': item[5], 'price': item[6] }
?
打印一下看看結(jié)果
?
for item in items:
print(item)
?
可以看到這樣的數(shù)據(jù)
沒毛病
現(xiàn)在我們獲取的是第 1 頁(yè)的數(shù)據(jù)
如何自動(dòng)獲取 25 頁(yè) 500 條數(shù)據(jù)呢
來個(gè) for 循環(huán)唄
?
if __name__ == "__main__":
for i in range(1,26):
main(i)
?
獲取完 500 本書的數(shù)據(jù)之后
存到 book.txt 文件
?
def write_item_to_file(item):
print('開始寫入數(shù)據(jù) ====> ' + str(item))
with open('book.txt', 'a', encoding='UTF-8') as f:
f.write(json.dumps(item, ensure_ascii=False) + '\n')
f.close()
?
完成
項(xiàng)目跑起來,學(xué)習(xí)過程中有不懂的可以加入我們的學(xué)習(xí)交流秋秋圈784中間758后面214,與你分享Python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)Python,和學(xué)習(xí)什么內(nèi)容。相關(guān)學(xué)習(xí)視頻資料、開發(fā)工具都有分享
打開我們存儲(chǔ)的 book.txt 看看
前 500 本書的數(shù)據(jù)就被我們拿到啦