网页爬虫抓取百度图片(猫评论信息和图片下载的二合一升级版() )

优采云 发布时间: 2022-03-04 19:07

  网页爬虫抓取百度图片(猫评论信息和图片下载的二合一升级版()

)

  之前我做过天猫评论信息抓取,还有评论图片下载,但是那一次我把所有的信息都存到数据库里,然后从数据库中提取图片信息下载。这次我做了信息爬取和图片下载二合一升级版。

  这一次,我们瞄准的是京东nike自营店。

  链接是:

  老办法,按F12打开流量监控,点击网络中的js,然后在众多信息中找到存放评论信息的链接,如下:

  

  我找到的最后一个链接如下所示:

  打开链接后发现也是json格式的,很简单

  先用urllib.request打开链接,然后用json加载json文件,代码如下:

  url='https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv119&productId=7252788&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'

html = urllib.request.urlopen(url).read().decode('gbk')

jsondata = re.search(r'\{.*\}', html).group()

data = json.loads(jsondata)

  这里使用正则是因为打开ht​​ml后发现是这样的:

  

  我们需要的json格式文件放在那个()里面。

  得到json格式的数据后,需要对数据进行过滤。我把用户名和评论等一些信息放入数据库,图片立即下载

  先写一个循环遍历当前url中的所有评论内容,部分代码如下:

   for i in range(0, len(data['comments'])):

id = data['comments'][i]['nickname']

# 用户名

content = data['comments'][i]['content']

# 评论

time = data['comments'][i]['creationTime']

# 评论日期

type = data['comments'][i]['referenceName']

# 型号及颜色

  在爬取图片链接下载的时候,因为有些评论没有图片,所以需要判断key是否存在。

  if('images' in data['comments'][i].keys()):

  如果存在,请获取图片链接,完成链接并下载:

  pics = data['comments'][i]['images'][k]['imgUrl']

a='http:'+pics

urllib.request.urlretrieve(a, 'D:\jd_pics/' + str(z)+'_'+str(i+1) + '_' + 'pic' + '_' + str(k) + '.jpg')

# 买家秀,命名规则:第几页第几条评论的第几个图片

  对于后续审稿的爬取,大体思路同上,这里不再赘述。

  最后就是考虑循环抓取了,只要写个循环就可以了

   for j in range(0,150):

url='https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv119&productId=7252788&score=0&sortType=5&page='+str(j)+'&pageSize=10&isShadowSku=0&fold=1'

  我在这里尝试抓取前150页评论的内容,因为我要边抓取边下载图片,所以需要很长时间。我花了大约25分钟,终于在数据库中得到了1000条信息

  

  和本地1216图片

  

  呵呵~这不对,150页每页10条信息,总数应该是1500!为什么我的数据库中只有 1000 个条目?

  

  我去百度了一下,一位前辈是这样解释的:

  “在 MySQL 中,每个数据库最多可以创建 20 亿个表,一个表允许定义 1024 列,每行最大长度为 8092 字节(不包括文本和图像类型的长度)。

  当表定义为 varchar、nvarchar 或 varbinary 类型列时,如果插入表中的数据行超过 8092 字节,则 Transact-SQL 语句将失败并生成错误消息。

  SQL对每张表的行数没有直接限制,但受数据库存储空间的限制。

  每个数据库的最大空间是1048516TB,所以一个表的最大可用空间是1048516TB减去数据库类系统表和其他数据库对象占用的空间。"

  也就是说,一个数据库的容量肯定是够用的,那剩下的 500 条记录到哪里去了呢?

  找了半天,发现navicat for mysql有分页功能,自动帮我分页

  

  

  oh~傻哭自己

  

  

  我是学生,刚开始学习python爬虫。如果本文和代码有漏洞,还望各位大神赐教,谢谢!

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线