python爬取京东某一商品的部分评论,爬的前20页都是正常的,从20多页开始都是重复的内容

CC467508144 2016-09-19 11:06:32
# -*- coding: utf-8 -*-
import MySQLdb
import MySQLdb.cursors
import urllib2
import requests
import json
import re
import base64
import sys
page=1
count=1
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }

for page in range(1,50):
url='http://club.jd.com/productpage/p-2829294-s-0-t-0-p-'+str(page)+'.html?'
cont=urllib2.urlopen(url).read()
rex=re.compile(r'\"content\":\"(.*?)\"\,\"creationTime\":\"(.*?)\"\,\"isTop\".*?\"referenceName\":\"(.*?)\"\,\"referenceTime\".*?\"score\":(.*?)\,\"status\".*?\"userProvince\":\"(.*?)\"\,\"userRegisterTime\".*?\"nickname\":\"(.*?)\"\,\"userClient\"',re.S)
#(r'\"tmall_vip_level\":(.*?)\,\"spuId\".*?\"sku\":(.*?)\,\"enableTime\".*?\"displayUserNick\":(.*?)\,\"displayUserNumId\".*?\"rateContent\":(.*?)\,\"rateDate\":(.*?)\,\"reply\"',re.S)
contents=rex.findall(cont)
for content in contents:
haveImg = re.search("img",content[0])
if not haveImg:
print count,content[0].decode('gbk').encode('utf-8'),content[1],content[2].decode('gbk').encode('utf-8'),content[3],content[4].decode('gbk').encode('utf-8'),content[5].decode('gbk').encode('utf-8')
count=count+1
print '页码:' ,page
page=page+1

这是主要代码,请大家看一下对不对~谢谢~

...全文
598 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hijack00 2016-09-21
  • 打赏
  • 举报
回复
引用 2 楼 CC467508144 的回复:
[quote=引用 1 楼 hijack00 的回复:] 你说的重复的问题,我暂时还没找到确切的原因。 但是你代码中 page=page+1 这条语句有些问题,因为for page in range(1,50):这条语句已经能够保证page递增了。 这一句代码异常(你的问题可能就是由于这个异常引起的) 另外,循环体内的 rex=re.compile(r'\"content\":\"(.*?)\"\,\"creationTime\":\"(.*?)\"\,\"isTop\".*?\"referenceName\":\"(.*?)\"\,\"referenceTime\".*?\"score\":(.*?)\,\"status\".*?\"userProvince\":\"(.*?)\"\,\"userRegisterTime\".*?\"nickname\":\"(.*?)\"\,\"userClient\"',re.S) #(r'\"tmall_vip_level\":(.*?)\,\"spuId\".*?\"sku\":(.*?)\,\"enableTime\".*?\"displayUserNick\":(.*?)\,\"displayUserNumId\".*?\"rateContent\":(.*?)\,\"rateDate\":(.*?)\,\"reply\"',re.S) 建议移到循环外面去。
还是会重复.....只要是20多页的数据都是重复的....这是京东的反爬虫么[/quote] 你可以手动在浏览器输入地址http://club.jd.com/productpage/p-2829294-s-0-t-0-p-xx.html?(xx替换为要查看的页面)看看每一页具体的内容,确认一下这几页的内容是不是真的是不重复的。 另外我还有个猜想,这个是不是跟浏览器cache有关?就是每次爬取的内容缓存在本地cache中,而你爬取速度过快,导致直接使用了cache里面的内容造成重复。你试试在每次循环之间延时一段时间看看行不行(这个只是我的猜想,没有验证过)。
CC467508144 2016-09-21
  • 打赏
  • 举报
回复
引用 1 楼 hijack00 的回复:
你说的重复的问题,我暂时还没找到确切的原因。 但是你代码中 page=page+1 这条语句有些问题,因为for page in range(1,50):这条语句已经能够保证page递增了。 这一句代码异常(你的问题可能就是由于这个异常引起的) 另外,循环体内的 rex=re.compile(r'\"content\":\"(.*?)\"\,\"creationTime\":\"(.*?)\"\,\"isTop\".*?\"referenceName\":\"(.*?)\"\,\"referenceTime\".*?\"score\":(.*?)\,\"status\".*?\"userProvince\":\"(.*?)\"\,\"userRegisterTime\".*?\"nickname\":\"(.*?)\"\,\"userClient\"',re.S) #(r'\"tmall_vip_level\":(.*?)\,\"spuId\".*?\"sku\":(.*?)\,\"enableTime\".*?\"displayUserNick\":(.*?)\,\"displayUserNumId\".*?\"rateContent\":(.*?)\,\"rateDate\":(.*?)\,\"reply\"',re.S) 建议移到循环外面去。
还是会重复.....只要是20多页的数据都是重复的....这是京东的反爬虫么
hijack00 2016-09-19
  • 打赏
  • 举报
回复
你说的重复的问题,我暂时还没找到确切的原因。 但是你代码中 page=page+1 这条语句有些问题,因为for page in range(1,50):这条语句已经能够保证page递增了。 这一句代码异常(你的问题可能就是由于这个异常引起的) 另外,循环体内的 rex=re.compile(r'\"content\":\"(.*?)\"\,\"creationTime\":\"(.*?)\"\,\"isTop\".*?\"referenceName\":\"(.*?)\"\,\"referenceTime\".*?\"score\":(.*?)\,\"status\".*?\"userProvince\":\"(.*?)\"\,\"userRegisterTime\".*?\"nickname\":\"(.*?)\"\,\"userClient\"',re.S) #(r'\"tmall_vip_level\":(.*?)\,\"spuId\".*?\"sku\":(.*?)\,\"enableTime\".*?\"displayUserNick\":(.*?)\,\"displayUserNumId\".*?\"rateContent\":(.*?)\,\"rateDate\":(.*?)\,\"reply\"',re.S) 建议移到循环外面去。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧