Python抓取京东图书评论数据


Posted in Python onAugust 31, 2014

 京东图书评论有非常丰富的信息,这里面就包含了购买日期、书名、作者、好评、中评、差评等等。以购买日期为例,使用Python + Mysql的搭配进行实现,程序不大,才100行。相关的解释我都在程序里加注了:

from selenium import webdriver
from bs4 import BeautifulSoup
import re
import win32com.client
import threading,time
import MySQLdb

def mydebug():
    driver.quit()
    exit(0)

def catchDate(s):
    """页面数据提取"""
    soup = BeautifulSoup(s)
    z = []
    global nowtimes
   
    m = soup.findAll("div",class_="date-buy")
    for obj in m:
        try:
            tmp = obj.find('br').contents
        except Exception, e:
            continue
        if(tmp != ""):
            z.append(tmp)
            nowtimes += 1
    return z

def getTimes(n,t):
    """获取当前进度"""
    return "当前进度为:" + str(int(100*n/t)) + "%"

#———————————————————————————————————| 程序开始 |—————————————————————————————————
#确定图书大类
cate = {"3273":"历史","3279":"心理学","3276":"政治军事","3275":"国学古籍","3274":"哲学宗教","3277":"法律","3280":"文化","3281":"社会科学"}

#断点续抓
num1 = input("bookid:")
num2 = input("pagenumber:")

#生成图书大类链接,共需17355*20 = 347100次
totaltimes = 347100.0
nowtimes = 0

#开启webdirver的PhantomJS对象
#driver = webdriver.PhantomJS()
driver = webdriver.Ie('C:\Python27\Scripts\IEDriverServer')
#driver = webdriver.Chrome('C:\Python27\Scripts\chromedriver')

#读出Mysql中的评论页面,进行抓取
# 连接数据库 
try:
    conn = MySQLdb.connect(host='localhost',user='root',passwd='',db='jd')
except Exception, e:
    print e
    sys.exit()

# 获取cursor对象
cursor = conn.cursor()
sql = "SELECT * FROM booknew ORDER BY pagenumber DESC"
cursor.execute(sql)
alldata = cursor.fetchall()

flag = 0
flag2 = 0

# 如果有数据返回就循环输出,http://club.jd.com/review/10178500-1-154.html
if alldata:
    for rec in alldata:
        #rec[0]--bookid,rec[1]--cateid,rec[2]--pagenumber
        if(rec[0] != str(num1) and flag == 0):
            continue
        else:
            flag = 1
        for p in range(num2,rec[2]):
            if(flag2 == 0):
                num2 = 0
                flag2 = 1
            p += 1
            link = "http://club.jd.com/review/" + rec[0] + "-1-" + str(p) + ".html"
            #抓网页
            driver.get(link)
            html = driver.page_source
            #抓评论
            buydate = catchDate(html)
            #写入数据库
            for z in buydate:
                sql = "INSERT INTO ljj (id, cateid, bookid, date) VALUES (NULL, '" + rec[0] + "','" + rec[1] + "','" + z[0] + "');"
                try:
                    cursor.execute(sql)
                except Exception, e:
                    print e
            conn.commit()
        print getTimes(nowtimes,totaltimes)

driver.quit()
cursor.close()
conn.close()

Python 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
Python中functools模块的常用函数解析
Jun 30 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python实现自动发送邮件功能
Mar 02 Python
Python3 log10()函数简单用法
Feb 19 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
python中@property的作用和getter setter的解释
Dec 22 Python
Python面向对象之成员相关知识总结
Jun 24 Python
Python深入学习之内存管理
Aug 31 #Python
Python深入学习之装饰器
Aug 31 #Python
Python深入学习之闭包
Aug 31 #Python
Python深入学习之对象的属性
Aug 31 #Python
Python深入学习之上下文管理器
Aug 31 #Python
Python深入学习之特殊方法与多范式
Aug 31 #Python
python中的reduce内建函数使用方法指南
Aug 31 #Python
You might like
PHP安装问题
2006/10/09 PHP
php5 图片验证码实现代码
2009/12/11 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
php封装一个异常的处理类
2017/06/08 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python常用算法学习基础教程
2017/04/13 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
CSS3 边框效果
2019/11/04 HTML / CSS
新闻记者个人求职的自我评价
2013/11/28 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
股东合作协议书范本
2014/04/14 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
后勤工作个人总结
2015/02/28 职场文书
高中美术教学反思
2016/02/17 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers