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中对元组和列表按条件进行排序的方法示例
Nov 10 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
django基础学习之send_mail功能
Aug 07 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
python中return如何写
Jun 18 Python
python中id函数运行方式
Jul 03 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
python实现简单的三子棋游戏
Apr 28 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
js正则表达式简单校验方法
2021/01/03 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Django中使用Celery的教程详解
2018/08/24 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
养殖项目策划书范文
2014/01/13 职场文书
项目经理任命书内容
2014/06/06 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
超级详细实用的pycharm常用快捷键
2021/05/12 Python
Python制作表白爱心合集
2022/01/22 Python
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers