當(dāng)前位置:
首頁 >
python爬虫之利用pyquery爬取当当网图书信息
發(fā)布時間:2023/12/31
30
豆豆
生活随笔
收集整理的這篇文章主要介紹了
python爬虫之利用pyquery爬取当当网图书信息
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
初學(xué)爬蟲, 根據(jù)課程學(xué)習(xí)python爬蟲,老規(guī)矩,先不管三七二十幾,先敲了再說。
需求:
爬取圖書的圖片鏈接、圖書的title信息、當(dāng)前定價、評論數(shù)和評價星數(shù)共五部分信息。
?分析:
打開當(dāng)當(dāng),搜索python書籍,然后右鍵,檢查網(wǎng)頁元素,找到network,然后刷新整個頁面,就會返回請求的頁面數(shù)據(jù),找到左邊的紅框內(nèi)的請求鏈接,然后打開右邊的response模塊,檢查下面返回的內(nèi)容是否有我們需要的信息,發(fā)現(xiàn)沒問題,就可以繼續(xù)往下進行。
?尋找圖片:?
把鼠標放在網(wǎng)頁的圖片上直接右鍵,然后點擊檢查,可以直接定位到網(wǎng)頁源碼的圖片所在位置,如下圖:
?此時發(fā)現(xiàn)每一條<li ddt-pit******>...</li>內(nèi)的信息都是一條圖書信息
而里面的這個鏈接就是我們要找的第一條數(shù)據(jù)信息,圖片的鏈接
?此時便可先獲取圖片的鏈接
import requests from pyquery import PyQuery import csv import time# 找到瀏覽器的headers headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'} base_url = 'https://search.dangdang.com/?key=python&act=input' # 獲取頁面 res = requests.get(base_url,headers=headers) # 解析頁面 html = res.content.decode('GBK') # 獲取頁面返回信息后解碼,一般使用utf-8,而此當(dāng)當(dāng)網(wǎng)使用的是GBK編碼,在解碼的時候我們就用GBK進行解碼doc = PyQuery(html) book_ul = doc('#component_59 li').items() # 獲取所有存放在li標簽里的圖書的信息,并存放在迭代器中 for one_li in book_ul:#print(one_li)# 獲取圖片鏈接,因為有的圖片鏈接是放在src屬性中,有的鏈接是放在data-original屬性中,所以用一個if判斷來選取if one_li('.pic img').attr('data-original'):img_url = one_li('.pic img').attr('data-original')else:img_url = one_li('.pic img').attr('src')print(img_url)# 標題title = one_li('.name a').attr('title')#print(title)# 價格price = one_li('.price .search_now_price').text()#print(price)# 獲取評價數(shù)comments = one_li('.search_star_line .search_comment_num').text()#print(comments)# 獲取星數(shù),本身網(wǎng)頁中的星星數(shù)是對應(yīng)的數(shù)值,所以我們需要進行一個轉(zhuǎn)換stars = float(one_li('.search_star_black span').attr('style').split(':')[-1].strip('%;'))/20#print(stars)?輸出圖片鏈接如下:
同樣道理,獲取標題、定價、評價數(shù)、評價星數(shù),同樣在剛才的循環(huán)代碼添加:
?最后加入翻頁,整理完整代碼如下:
import requests from pyquery import PyQuery import csv import timeclass DDSpider(object):def __init__(self,key):self.key = key # 當(dāng)前搜索的圖書名,搜索關(guān)鍵詞self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'}self.base_url = 'https://search.dangdang.com/?key='+key+'&act=input&page_index={}'# 獲取界面def get_pageInfo(self):num_page = 0while True:num_page += 1page_url = self.base_url.format(num_page)res = requests.get(page_url,headers=self.headers) # print(res.content.decode('GBK'))# 解析df = self.parse_pageInfo(res.content.decode('GBK'))return dftime.sleep(1) # 為了防止請求過快,添加緩沖時間if num_page == 1: # 當(dāng)前設(shè)置為爬取1頁數(shù)據(jù)break# 解析界面def parse_pageInfo(self,html):doc = PyQuery(html)book_ul = doc('#component_59 li').items()img_list = []title_list = []price_list = []comments_list = []stars_list = []for one_li in book_ul: # print(one_li)# 獲取圖片鏈接if one_li('.pic img').attr('data-original'):img_url = one_li('.pic img').attr('data-original')else:img_url = one_li('.pic img').attr('src')img_list.append('http:'+img_url)# 標題title = one_li('.name a').attr('title') # print(title)title_list.append(title)# 價格price = one_li('.price .search_now_price').text() # print(price)price_list.append(price)# 獲取評價數(shù)comments = one_li('.search_star_line .search_comment_num').text() # print(comments)comments_list.append(comments)# 獲取星數(shù)stars = float(one_li('.search_star_black span').attr('style').split(':')[-1].strip('%;'))/20#stars = one_li('.search_star_black span').attr('style')#print(stars)stars_list.append(stars)data = {'img':img_list,'title':title_list,'price':price_list,'comments':comments_list,'stars':stars_list}return pd.DataFrame(data)if __name__ == '__main__':dd = DDSpider('python')df = dd.get_pageInfo()print(df)總結(jié)
以上是生活随笔為你收集整理的python爬虫之利用pyquery爬取当当网图书信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么样才可以?批量下载快手播主的全部视频
- 下一篇: 2021年8月21日 Python图像全