欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python爬虫之利用pyquery爬取当当网图书信息

发布时间:2023/12/31 python 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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爬取当当网图书信息的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。