溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息

發(fā)布時(shí)間:2022-01-13 15:23:59 來(lái)源:億速云 閱讀:913 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!


1、爬取目標(biāo)

對(duì)于要爬取的當(dāng)當(dāng)網(wǎng)書籍信息,首先打開當(dāng)當(dāng)網(wǎng)頁(yè),以數(shù)據(jù)分析為關(guān)鍵字搜索出來(lái)頁(yè)面所有書籍信息。如下圖:

如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息

本次爬取的結(jié)果有11項(xiàng):
(1)每頁(yè)序號(hào)
(2)商品ID
(3)標(biāo)題
(4)書籍價(jià)格
(5)書籍原價(jià)
(6)書籍折扣
(7)電子書價(jià)格
(8)作者
(9)出版時(shí)間
(10)出版社
(11)書籍評(píng)論量

2、爬取過(guò)程

(1)確定url地址

分析網(wǎng)頁(yè)頁(yè)面,當(dāng)輸入數(shù)據(jù)關(guān)系關(guān)鍵字以后,點(diǎn)擊搜索出來(lái)所有書籍網(wǎng)頁(yè)信息后,將網(wǎng)頁(yè)拉到最下面可以看到如下圖:
如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息

可見此網(wǎng)頁(yè)是翻頁(yè)的,因此,點(diǎn)擊頁(yè)面2、3、1,提取網(wǎng)頁(yè)的url如下:

http://search.dangdang.com/?key=%CA%FD%BE%DD%B7%D6%CE%F6&act=input&page_index=2

http://search.dangdang.com/?key=%CA%FD%BE%DD%B7%D6%CE%F6&act=input&page_index=3

http://search.dangdang.com/?key=%CA%FD%BE%DD%B7%D6%CE%F6&act=input&page_index=1

從每頁(yè)的URL地址信息可以發(fā)現(xiàn)每一個(gè)頁(yè)面的地址差異就是page_index的值,所以u(píng)rl地址可以確認(rèn)為:

http://search.dangdang.com/?key=%CA%FD%BE%DD%B7%D6%CE%F6&act=input&page_index=

page_index的值,我們可以通過(guò)循環(huán)依次在地址后面添加。

代碼如下:
urls = ['http://search.dangdang.com/?key=%CA%FD%BE%DD%B7%D6%CE%F6&act=input&page_index={}'.format(i) for i in range(1,101)]

(2)確定爬取節(jié)點(diǎn)

有了url地址,就可以使用lxml庫(kù)來(lái)獲取網(wǎng)頁(yè)信息進(jìn)行解析,得到具體的爬取信息。鼠標(biāo)右鍵,點(diǎn)擊“檢查”,如下圖:

如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息

通過(guò)網(wǎng)頁(yè)html里面的信息對(duì)應(yīng)查找,可以找到li對(duì)應(yīng)每個(gè)書籍信息,詳細(xì)的信息如下圖可見:

如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息

可以看到書籍名字、價(jià)格等信息,然后通過(guò)Xpath可以逐一提取出來(lái)。詳細(xì)代碼如下:

html=requests.get(url,headers=headers)# html.encoding = "utf-8"# print('第一層調(diào)用是否返回正常:',html)html.encoding = html.apparent_encoding  # 將亂碼進(jìn)行編碼selector=etree.HTML(html.text)# print(selector)datas=selector.xpath('//div[@class="con shoplist"]')# print(datas)
for data in datas:   Classs = data.xpath('div/ul/li/@class')                        #line1-line60   IDDs = data.xpath('div/ul/li/@id')                              #id   titles = data.xpath('div/ul/li/a/@title')                      #標(biāo)題   prices = data.xpath('div/ul/li/p[3]/span[1]/text()')           #書籍價(jià)格   source_prices = data.xpath('div/ul/li/p[3]/span[2]/text()')    #書籍原價(jià)   discounts = data.xpath('div/ul/li/p[3]/span[3]/text()')        #書籍折扣   # dian_prices = data.xpath('div/ul/li/p[3]/a[2]/i/text()')       #電子書價(jià)格   authors = data.xpath('div/ul/li/p[5]/span[1]/a[1]/@title')     #作者   publish_times = data.xpath('div/ul/li/p[5]/span[2]/text()')    #出版時(shí)間   publishs = data.xpath('div/ul/li/p[5]/span[3]/a/text()')       #出版社   comments = data.xpath('div/ul/li/p[4]/a/text()')               #書籍評(píng)論量   urls=data.xpath('div/ul/li/a/@href')

備注:基于如果想爬取電子書價(jià)格,由于有些書籍沒有電子書價(jià)格,因此爬取出來(lái)會(huì)錯(cuò)行,務(wù)必通過(guò)提取書籍頁(yè)面url,遞歸再次爬取詳情頁(yè)進(jìn)行空值處理,避免錯(cuò)行。

(3)保存爬取信息入數(shù)據(jù)庫(kù)

此處我們將爬取的信息存儲(chǔ)入數(shù)據(jù)庫(kù),就需要先連接數(shù)據(jù)庫(kù)和建立數(shù)據(jù)庫(kù)表,便于后續(xù)存儲(chǔ)。數(shù)據(jù)連接和表建立代碼如下:

db = pymysql.connect(host='localhost', user='root', passwd='庫(kù)密碼', db='庫(kù)名稱:Learn_data', port=3306, charset='utf8')print("數(shù)據(jù)庫(kù)連接")cursor = db.cursor()cursor.execute("DROP TABLE IF EXISTS Learn_data.dangdangweb_info_detail")sql = """CREATE TABLE IF not EXISTS Learn_data.dangdangweb_info_detail (   id int auto_increment primary key,   Class CHAR(100),   IDD CHAR(100),   title CHAR(100),   price CHAR(100),   source_price CHAR(100),   discount CHAR(100),   author CHAR(100),   publish_time CHAR(100),   publish CHAR(100),   comment CHAR(100),   dian_price CHAR(100))DEFAULT CHARSET=utf8"""cursor.execute(sql)

爬取的數(shù)據(jù)存儲(chǔ)入表中代碼如下:
cursor.execute("insert into dangdangweb_info_detail (Class,IDD,title,price,source_price,discount,author,publish_time,publish,comment,dian_price)"              "values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",       (str(Class),str(IDD),str(title),str(price),str(source_price),str(discount),str(author)        ,str(publish_time),str(publish),str(comment),str(dian_price[0])))

最后必須使用:db.commit() 關(guān)閉數(shù)據(jù)庫(kù),不然數(shù)據(jù)無(wú)法正確存儲(chǔ)入表。

3、爬取結(jié)果

最后,我們將上面的代碼整合起來(lái)就可以正常爬取。存儲(chǔ)的結(jié)果截圖如下:

如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息

以上是“如何使用python爬取當(dāng)當(dāng)網(wǎng)所有數(shù)據(jù)分析書籍信息”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI