python爬虫之利用pyquery爬取当当网图书信息
生活随笔
收集整理的這篇文章主要介紹了
python爬虫之利用pyquery爬取当当网图书信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初學爬蟲, 根據課程學習python爬蟲,老規矩,先不管三七二十幾,先敲了再說。
需求:
爬取圖書的圖片鏈接、圖書的title信息、當前定價、評論數和評價星數共五部分信息。
?分析:
打開當當,搜索python書籍,然后右鍵,檢查網頁元素,找到network,然后刷新整個頁面,就會返回請求的頁面數據,找到左邊的紅框內的請求鏈接,然后打開右邊的response模塊,檢查下面返回的內容是否有我們需要的信息,發現沒問題,就可以繼續往下進行。
?尋找圖片:?
把鼠標放在網頁的圖片上直接右鍵,然后點擊檢查,可以直接定位到網頁源碼的圖片所在位置,如下圖:
?此時發現每一條<li ddt-pit******>...</li>內的信息都是一條圖書信息
而里面的這個鏈接就是我們要找的第一條數據信息,圖片的鏈接
?此時便可先獲取圖片的鏈接
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,而此當當網使用的是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)# 獲取評價數comments = one_li('.search_star_line .search_comment_num').text()#print(comments)# 獲取星數,本身網頁中的星星數是對應的數值,所以我們需要進行一個轉換stars = float(one_li('.search_star_black span').attr('style').split(':')[-1].strip('%;'))/20#print(stars)?輸出圖片鏈接如下:
同樣道理,獲取標題、定價、評價數、評價星數,同樣在剛才的循環代碼添加:
?最后加入翻頁,整理完整代碼如下:
import requests from pyquery import PyQuery import csv import timeclass DDSpider(object):def __init__(self,key):self.key = key # 當前搜索的圖書名,搜索關鍵詞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: # 當前設置為爬取1頁數據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)# 獲取評價數comments = one_li('.search_star_line .search_comment_num').text() # print(comments)comments_list.append(comments)# 獲取星數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)總結
以上是生活随笔為你收集整理的python爬虫之利用pyquery爬取当当网图书信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么样才可以?批量下载快手播主的全部视频
- 下一篇: websocket python爬虫_p