编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

界面工厂编程视频教程广告联系qq1031180668广告位
查看: 94|回复: 1

[python] python爬取京东畅销书榜

[复制链接]
  • ta_mind

    2018-6-24 05:41
  • classn_01: 69 classn_02

    [LV.6]常住居民II

    929

    主题

    1650

    帖子

    3183

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3183

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2018-6-19 20:47:29 | 显示全部楼层 |阅读模式
    一个很好的练手项目。
    一、html结构分析
    图书的介绍信息都存在class为p-detail的div模块里, 一个这样的div里存储着一本书的完备信息。图书的购买链接,书名都在这个div下的a标签里。这样,拿到这个a标签就能找到我要的信息了
    二、如何找下一个页面的url
    点开“下一页”这个按钮的html信息,a标签里的href就是下一个页面的url。so easy。爬虫挖掘url的策略无外乎宽度优先搜索(BFS)和深度优先搜索(DFS)。而我则采取了深搜。
    三、代码实现怎么解析页面的内容,如何找下一个页面,解决这两个问题就可以写爬虫代码了。
    开发中需要用到的重要的python库:
    1. html内容解析, 使用BeautifulSoup库, Beautiful Soup库中文文档。 这个库相当于Java里的Jsoup库。
    2. 网页下载,使用requests库。功能类似Java的httpclient库。

    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    #!/usr/bin/env python
    # encoding=utf-8
    import requests
    from bs4 import BeautifulSoup
    from requests import HTTPError
    HTTP_ = 'http:'
    def download_page(url):
        print(url)
        try:
            data = requests.get(url).content
        except HTTPError as err:
            print(err.__traceback__)
        except ConnectionError as err:
            print(err.__traceback__)
        except TimeoutError as err:
            print(err.__traceback__)
        return data
    def parse_html(html):
        soup = BeautifulSoup(html, "html.parser")
        book_list_soup = soup.find_all('div', attrs={'class': 'p-detail'})
        for book_li in book_list_soup:
            a_tag = book_li.find('a', attrs={'class': 'p-name'})
            print('书名 : ' + a_tag['title'] + '\t链接 : ' + HTTP_ + a_tag['href'])
        next_button = soup.find('a', attrs={'class': 'pn-next'})
        return next_button['href']
    def main():
        download_url = '//book.jd.com/booktop/0-0-0.html?category=3287-0-0-0-5-1#comfort'
        while download_url != 'javascript:void(0);':
            html = download_page(HTTP_ + download_url)
            download_url = parse_html(html)
    if __name__ == '__main__':
        main()


    程序输出, 榜单有100个,这里只贴出前20个
    书名 : Python编程 从入门到实践    链接 : http://item.jd.com/11993134.html
    书名 : 机器学习【首届京东文学奖-年度新锐入围作品】     链接 : http://item.jd.com/11867803.html
    书名 : 数学之美(第二版)  链接 : http://item.jd.com/11572052.html
    书名 : 深度学习   链接 : http://item.jd.com/12128543.html
    书名 : Word Excel PPT 2016办公应用从入门到精通(附光盘) 链接 : http://item.jd.com/11988251.html
    书名 : 鸟哥的Linux私房菜 (基础学习篇 第三版)    链接 : http://item.jd.com/10064429.html
    书名 : Python基础教程(第3版)    链接 : http://item.jd.com/12279949.html
    书名 : Python核心编程(第3版)    链接 : http://item.jd.com/11936238.html
    书名 : Java从入门到精通(第4版 附光盘)    链接 : http://item.jd.com/11985075.html
    书名 : 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)  链接 : http://item.jd.com/11252778.html
    书名 : TensorFlow:实战Google深度学习框架(第2版) 链接 : http://item.jd.com/12287533.html
    书名 : Java编程思想(第4版)  链接 : http://item.jd.com/10058164.html
    书名 : Python零基础入门学习-水木书荟 链接 : http://item.jd.com/12004711.html
    书名 : C Primer Plus 第6版 中文版  链接 : http://item.jd.com/11917487.html
    书名 : 算法导论(原书第3版)/计算机科学丛书    链接 : http://item.jd.com/11144230.html
    书名 : Python 3网络爬虫开发实战   链接 : http://item.jd.com/12333540.html
    书名 : 高性能MySQL(第3版)  链接 : http://item.jd.com/11220393.html
    书名 : 浪潮之巅 第三版 套装上下册     链接 : http://item.jd.com/11922453.html
    书名 : 利用Python进行数据分析 链接 : http://item.jd.com/11352441.html
    书名 : Excel高效办公:数据处理与分析(修订版)(附CD光盘1张)    链接 : http://item.jd.com/11042690.html



    python言简意赅,一行顶Java10行。以前用Java实现过crawler,代码比python版的冗长多了。
    (就你库多)


    不积跬步,无以至千里

    classn_11

    0

    主题

    27

    帖子

    71

    积分

    注册会员

    Rank: 2

    积分
    71
    发表于 2018-7-5 12:52:20 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|Archiver|小黑屋|sitemap|编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

    GMT+8, 2018-7-19 05:47 , Processed in 0.093751 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表