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 相关文章推荐
Python找出9个连续的空闲端口
Feb 01 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
Django中Forms的使用代码解析
Feb 10 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
对python制作自己的数据集实例讲解
Dec 12 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
Python自动创建Excel并获取内容
Sep 16 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 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基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
pyqt4教程之widget使用示例分享
2014/03/07 Python
利用python批量检查网站的可用性
2016/09/09 Python
通过python爬虫赚钱的方法
2019/01/29 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
Python with语句和过程抽取思想
2019/12/23 Python
Pytorch释放显存占用方式
2020/01/13 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
单位单身证明范本
2014/01/11 职场文书
中学生期末评语
2014/02/03 职场文书
党在我心中演讲稿
2014/09/02 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
员工辞职信范文大全
2015/05/12 职场文书
培训讲师开场白
2015/06/01 职场文书