Java程序员的第一个Python小程序:京东畅销书榜爬虫

毕业后的5年多时间里一直在Java的生态体系里游走,很少触碰其他非Java技术栈。职业安全感隐隐的警告我不能一直逗留在自己的舒适区里,不能被大时代抛弃。时下最火的莫过于AI, 而AI时代则带火了AI第一语言Python,那就学学Python。学习一门新技术的最佳方法是:learning by doing, 在实践中学习。我选择了爬虫作为自己的第一个练手小项目。爬虫的目标是京东的计算机与互联网图书销量榜
Java程序员的第一个Python小程序:京东畅销书榜爬虫_第1张图片

一、html结构分析

链接请移步: http://book.jd.com/booktop/0-0-0.html?category=3287-0-0-0-5-1#comfort

Java程序员的第一个Python小程序:京东畅销书榜爬虫_第2张图片
图书的介绍信息都存在class为p-detail的div模块里, 一个这样的div里存储着一本书的完备信息。图书的购买链接,书名都在这个div下的a标签里。这样,拿到这个a标签就能找到我要的信息了

二、如何找下一个页面的url

Java程序员的第一个Python小程序:京东畅销书榜爬虫_第3张图片
点开“下一页”这个按钮的html信息,a标签里的href就是下一个页面的url。so easy。爬虫挖掘url的策略无外乎宽度优先搜索(BFS)和深度优先搜索(DFS)。而我则采取了深搜。

三、代码实现

怎么解析页面的内容,如何找下一个页面,解决这两个问题就可以写爬虫代码了。

开发中需要用到的重要的python库:
1. html内容解析, 使用BeautifulSoup库, Beautiful Soup库中文文档。 这个库相当于Java里的Jsoup库。
2. 网页下载,使用requests库。功能类似Java的httpclient库。

#!/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版的冗长多了。

你可能感兴趣的:(Java)