专栏首页Hi, Python如何爬取当当网畅销书排行榜信息? requests + pyquery

如何爬取当当网畅销书排行榜信息? requests + pyquery

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_40313634/article/details/103099547

'''
爬取当当网的五星图书排行榜的信息
'''
Max_Page = 3  # 爬取前三页的排行榜信息
import requests
from pyquery import PyQuery as pq
import json

def requests_dangdang(url, headers=None, retry=3):
    for _ in range(retry):
        try:
            response = requests.get(url=url, headers=headers)
            if response.status_code == 200:
                response.encoding = response.apparent_encoding
                return response.text
        except requests.RequestException as e:
            print(f'Requests Error:\n\t{url}\n\t{e.args}')
    return None

def parse_html(text):
    doc = pq(text)('ul[class="bang_list clearfix bang_list_mode"] li')
    for item in doc.items():
        yield {
           '排名': item('[class^="list_num"]').text().rstrip('.'),  ## 排名
           '书名': item('.name a').text(),  ## 书名
           '推荐指数': item('.star .tuijian').text(),  ## 推荐指数
           '作者': item('.publisher_info a').attr.title,  ## 作者
           '五星评分次数': item('.biaosheng span').text(),  ## 五星评分次数
           '价格': item('.price p:not([class]) .price_n').text(),  ## 价格
           '图书链接': item('.pic a').attr.href  ## 图书链接
       }
    return

def save_book_info(book):
    json_str = json.dumps(book, ensure_ascii=False, indent=4)
    with open('book.json', 'a', encoding='utf-8') as f:
        f.write(json_str)

def run(max_page=Max_Page):
    for page in range(1, max_page+1):
        url = f'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-{str(page)}'
        text = requests_dangdang(url)
        if text == None:
            continue
        for book in parse_html(text):
            save_book_info(book)

if __name__ == '__main__':
    run()

执行结果:

{
    "排名": "1",
    "书名": "谜案鉴赏",
    "推荐指数": "100%推荐",
    "作者": "[美]莉比・菲舍尔・赫尔曼 著,汪德均 /刘建洲/马遇乐 译",
    "五星评分次数": "17669次",
    "价格": "¥35.80",
    "图书链接": "http://product.dangdang.com/28470981.html"
}{
    "排名": "2",
    "书名": "朝圣者",
    "推荐指数": "100%推荐",
    "作者": "【澳】泰瑞・海耶斯 译尤传莉著;酷威文化 出品",
    "五星评分次数": "19538次",
    "价格": "¥45.20",
    "图书链接": "http://product.dangdang.com/25141508.html"
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 简明手册

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    云雀叫了一整天
  • 如何解析 m3u8 文件?

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    云雀叫了一整天
  • Python_

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    云雀叫了一整天
  • 让TabBar上的图片居中

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • nginx 学习

    ==备注:== ==nginx如果没有设置开机自启动的话,当机器重启后,nginx不会自启动。==

    贺贺V5
  • 图灵聊天机器人

    佛系编程人
  • PWA渐进式增强WEB应用

    PWA是Progressive Web App的英文缩写,是渐进式增强WEB应用, 是Google新开发的web技术。目的就是在移动端利用提供的标准化框架,在网...

    ytkah
  • 一文搞明白测试认证机构资质问题

    安全产品不仅要满足各种各样的行业标准、规范,还需要通过各种测试认证,如果有一款产品需要过国密二级认证该怎么去了解信息呢?该找哪一家测试实验室去测试、哪一家认证机...

    安智客
  • 移动端H5页面踩过的CSS坑

    知乎有网友的评论是:这个问题通过css是无法解决的,即使解决了也是一种通过微调来实现的hack方法,因为文字在content-area内部渲染的时候已经偏移了,...

    Originalee
  • react-native-easy-app 详解与使用之(三) View,Text,Image,Flatlist

    react-native-easy-app 是一款为React Native App快速开发提供基础服务的纯JS库(支持 IOS & Android),特别是在...

    rufeng008

扫码关注云+社区

领取腾讯云代金券