Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4056932
  • 博文数量: 272
  • 博客积分: 7846
  • 博客等级: 少将
  • 技术积分: 6476
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-25 16:27
文章分类

全部博文(272)

分类: Python/Ruby

2014-01-14 20:34:56


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

  1. from selenium import webdriver
  2. from bs4 import BeautifulSoup
  3. import re
  4. import win32com.client
  5. import threading,time
  6. import MySQLdb

  7. def mydebug():
  8.     driver.quit()
  9.     exit(0)

  10. def catchDate(s):
  11.     """页面数据提取"""
  12.     soup = BeautifulSoup(s)
  13.     z = []
  14.     global nowtimes
  15.     
  16.     m = soup.findAll("div",class_="date-buy")
  17.     for obj in m:
  18.         try:
  19.             tmp = obj.find('br').contents
  20.         except Exception, e:
  21.             continue
  22.         if(tmp != ""):
  23.             z.append(tmp)
  24.             nowtimes += 1
  25.     return z

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


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

  32. #断点续抓
  33. num1 = input("bookid:")
  34. num2 = input("pagenumber:")

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

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

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

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

  54. flag = 0
  55. flag2 = 0

  56. # 如果有数据返回就循环输出,http://club.jd.com/review/10178500-1-154.html
  57. if alldata:
  58.     for rec in alldata:
  59.         #rec[0]--bookid,rec[1]--cateid,rec[2]--pagenumber
  60.         if(rec[0] != str(num1) and flag == 0):
  61.             continue
  62.         else:
  63.             flag = 1
  64.         for p in range(num2,rec[2]):
  65.             if(flag2 == 0):
  66.                 num2 = 0
  67.                 flag2 = 1
  68.             p += 1
  69.             link = "" + rec[0] + "-1-" + str(p) + ".html"
  70.             #抓网页
  71.             driver.get(link)
  72.             html = driver.page_source
  73.             #抓评论
  74.             buydate = catchDate(html)
  75.             #写入数据库
  76.             for z in buydate:
  77.                 sql = "INSERT INTO ljj (id, cateid, bookid, date) VALUES (NULL, '" + rec[0] + "','" + rec[1] + "','" + z[0] + "');"
  78.                 try:
  79.                     cursor.execute(sql)
  80.                 except Exception, e:
  81.                     print e
  82.             conn.commit()
  83.         print getTimes(nowtimes,totaltimes)

  84. driver.quit()
  85. cursor.close()
  86. conn.close()



   
阅读(15347) | 评论(7) | 转发(3) |
给主人留下些什么吧!~~

白头雕0072015-11-16 15:37:36

五岳之巅:看你像分析什么了?有做情感分析的,有做购买预测的,还有做语言学的矫正的。。。。。不一而足

我想做个词频分析,但是网上都是直接对整个文本进行分词的,我这个一行就是一个文本,初次弄这个还没有想好该怎么处理

回复 | 举报

五岳之巅2015-11-07 16:52:28

白头雕007:抓取的评价内容都是中文,有没有好的分析思路哇

看你像分析什么了?有做情感分析的,有做购买预测的,还有做语言学的矫正的。。。。。不一而足

回复 | 举报

白头雕0072015-11-06 12:40:37

抓取的评价内容都是中文,有没有好的分析思路哇

五岳之巅2014-11-07 13:33:11

ld304695350:居然遇到我导师母校的老师。。。看楼主似乎很喜欢用模拟浏览器内核来解析js,但性能会很差的啊,而且如果频率高了也可能会封IP
建议将模拟浏览器的方式改为浏览器抓包得到js指向的url,然后观察参数规律就可以根据京东内部接口去抓了,这个高并行也不会封IP的,而且可以将BS4改成lxml用xpath,速度快挺多。
看完数据抓取的艺术以后感觉不留言支持一下说不过去,准备去图书馆借阅大数据分析:点数成金拜读一下
真羡慕可以研究自己喜欢的东西,快毕业了何去何从真迷茫,如果早点看到这文章早就准备去考博了,情报就业真难

好文赞一个

《大数据分析:点数成金》并不是本技术书,原作者对技术了解并不够深入,本书具有一定的局限性,只是原文文采太好翻译起来很吃力。你说的适合于商业应用,是大规模数据抓取方案,casper也不错,但是必须看到凡是有利就有弊,如果想从淘宝集市中抓取某个名字的书的信息,可是这本书比如是本教程,同一个人还出了很多版本,此时如果没有人的介入便很难从一大堆结果中快速选择(我的意思是如果打开一个一个链接,再判断也行,但是太浪费资源和时间,还有书还可能分为套装和非套装,还有的是相关的两本一起卖,所以让人来判断就会把事情变得很简单),用博客里的这种方法就能实时改写源页面,加入多选框让用户选择,还能实现对选择的数据进行初步处理等等操作。虽然人工参与会消耗更多时间,但却可以大为提升数据的准确性和精确性。封IP的话,咱们也可以在数据抓取过程中,人工加入一些“噪音”。
只要有真才实学,最终,条条大路都会通罗马。我就是学情报的,祝好。

回复 | 举报

ld3046953502014-11-07 11:51:57

居然遇到我导师母校的老师。。。看楼主似乎很喜欢用模拟浏览器内核来解析js,但性能会很差的啊,而且如果频率高了也可能会封IP
建议将模拟浏览器的方式改为浏览器抓包得到js指向的url,然后观察参数规律就可以根据京东内部接口去抓了,这个高并行也不会封IP的,而且可以将BS4改成lxml用xpath,速度快挺多。
看完数据抓取的艺术以后感觉不留言支持一下说不过去,准备去图书馆借阅大数据分析:点数成金拜读一下
真羡慕可以研究自己喜欢的东西,快毕业了何去何从真迷茫,如果早点看到这文章早就准备去考博了,情报就业真难

好文赞一个