日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

發布時間:2024/4/15 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

來啦,老弟

?

?

我們已經知道怎么使用

?

Requests

?

進行各種請求騷操作

?

也知道了對服務器返回的數據如何使用

?

正則表達式

?

來過濾我們想要的內容

?

...

?

那么接下來

?

我們就使用 requests 和 re 來寫一個爬蟲

?

作為一個愛看書的你(說的跟真的似的)

?

?

怎么能發現好書呢?

?

所以我們

?

爬取當當網的前 500 本好五星評書籍

?

怎么樣?

?

?

ok

?

接下來就是

?

學習 python 的正確姿勢

?

請在電腦的陪同下

?

邊看本文邊練習

?

首先我們要對我們的目標網站進行分析

?

先摸清對方的底

?

我們才能戰無不勝

?

?

打開這個書籍排行榜的地址

?

http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1

?

我們可以看到是這樣的一個網頁

?

?

每一頁顯示 20 本書

?

當我們點擊下一頁的時候

?

你可以發現地址變了

?

http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2

?

也就是我們翻到第幾頁的時候

?

鏈接地址的最后一個參數會跟著變

?

那么我們等會在 python 中可以用一個變量

?

來實現獲取不同頁數的內容

?

?

接著

?

用我們之前說的?Chrome?騷操作

?

來分析一下

?

我們要的內容是怎么請求的

?

以及

?

返回給我們的源代碼是什么樣的

?

?

可以看到

?

我們通過 GET 請求

?

?

我們的請求頭

?

?

這是服務器返回來的數據

?

?

接著我們再來分析一下我們要抓取的關鍵信息

?

?

?

我們要的就是前 500 本書的

?

排名

書名

圖片地址

作者

推薦指數

五星評分次數

價格

?

通過源碼我們可以看到

?

這些信息被放在了 <li> 標簽中

?

?

那么我們等會就可以使用

?

年輕人,不會正則表達式你睡得著覺?有點出息沒有?

?

來進行過濾我們要的信息

?

一頓分析完了之后

?

接下來擼代碼了

?

?

主要思路

?

使用 page 變量來實現翻頁

?

我們使用 requests 請求當當網

?

然后將返回的 HTML 進行正則解析

?

由于我們暫時還沒學到數據庫

?

所以解析完之后就把內容存到文件中

?

?

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)

?

請求當當網

?

當我們請求成功之后

?

拿到源代碼

?

def request_dandan(url):
? ?try:
? ? ? ?response = requests.get(url)
? ? ? ?if response.status_code == 200:
? ? ? ? ? ?return response.text
? ?except requests.RequestException:
? ? ? ?return None

?

?

拿到源代碼了

?

就要對其解析

?

使用正則表達式獲取我們想要的關鍵信息

?

獲取到了之后我們封裝一下數據

?

def parse_result(html):
? ?pattern = re.compile('<li>.*?list_num.*?(\d+).</div>.*?<img src="(.*?)".*?class="name".*?title="(.*?)">.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span></div>.*?<p><span\sclass="price_n">&yen;(.*?)</span>.*?</li>',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]
? ? ? ?}

?

?

打印一下看看結果

?

for item in items:
? ? ? ?print(item)

?

可以看到這樣的數據

?

?

沒毛病

?

現在我們獲取的是第 1 頁的數據

?

如何自動獲取 25 頁 500 條數據呢

?

來個 for 循環唄

?

if __name__ == "__main__":
? ?for i in range(1,26):
? ? ? ?main(i)

?

?

獲取完 500 本書的數據之后

?

存到 book.txt 文件

?

?

def write_item_to_file(item):
? ?print('開始寫入數據 ====> ' + str(item))
? ?with open('book.txt', 'a', encoding='UTF-8') as f:
? ? ? ?f.write(json.dumps(item, ensure_ascii=False) + '\n')
? ? ? ?f.close()

?

?

完成

?

項目跑起來

?

?

?

打開我們存儲的 book.txt 看看

?

?

?

前 500 本書的數據就被我們拿到啦

?

?

?

本篇完

?

完整代碼小帥b已經放到公眾號后臺啦

?

需要的朋友

?

在公眾號發送

?

500

?

即可獲取

?

ok

?

咱們下回再見

?

?

掃一掃

學習 Python 沒煩惱

?

?

?

近期文章

?

python爬蟲03 | 那個叫做Urllib的庫讓我們的python假裝是瀏覽器

?

python爬蟲04 | 長江后浪推前浪,Requests庫把urllib庫拍在沙灘上

?

python爬蟲05 | 年輕人,不會正則表達式你睡得著覺?有點出息沒有?

?

?

?

?

?

?

?

支持小帥b的就順手

點個好看吧

轉載于:https://www.cnblogs.com/fxxkpython/p/10832023.html

總結

以上是生活随笔為你收集整理的python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。