请选择 进入手机版|继续访问电脑版
发新帖

scrapy 爬虫 返回的 response 没有下一页这个属性。

[复制链接]
4977 11

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如题。
举个例子:这个网站无法返回下一页。https://bbs.hupu.com/21593789.html
scrapy shell "https://bbs.hupu.com/21593789.html"print response.bodybody中没有next page属性 。什么原因啊?怎么解决?

举报 使用道具

回复

精彩评论11

welkinzh  新手上路  发表于 2018-3-6 19:51:24 | 显示全部楼层
网页源代码里确实没有这个属性,应该是 js 加载的

举报 使用道具

回复
locoz  新手上路  发表于 2018-3-6 20:02:05 | 显示全部楼层
那个下一页按钮是 js 加载的,可以用这里的 pageCount 判断

                               
登录/注册后可看大图

举报 使用道具

回复
data2world  新手上路  发表于 2018-3-6 20:03:38 | 显示全部楼层
@locoz maxpage 我倒是能获取到,总的 urls 我也能拼。就是 scrapy 的 yield 是不按顺序返回的,而我需要 1 页爬了,再爬第二页。部分代码是这样的:
```python
        max_page = int(response.xpath('//*[@id="bbstopic_set"]/@data-maxpage').extract()[0])

        if max_page > 1:
            for page_num in range(2, max_page + 1):
                next_page_url = 'https://bbs.hupu.com/{}-{}.html'.format(response.meta["short_url"], page_num)
                print "****", next_page_url, "****"
                yield scrapy.Request(next_page_url, callback=self.parse_content, headers=self.headers,
                                     cookies=self.cookies,
                                     meta={"item": item})
        else:
            yield item

def parse_content(self, response):
     pass
```

举报 使用道具

回复
flyxl  新手上路  发表于 2018-3-6 20:23:19 | 显示全部楼层
为什么一定要按页爬呢?是增量爬取还是数据库记录要有序?如果是数据库记录的问题,入库的时候记录一下当前是第几页

举报 使用道具

回复
data2world  新手上路  发表于 2018-3-6 20:32:01 | 显示全部楼层
@flyxl 因为我需要爬所有的分页页面爬完之后合并成一个 list,在赋给父 item。但是 yield 是异步的,所以不能以 for 循环的执行次数判断是否爬取完了。

举报 使用道具

回复
zhijiansha  注册会员  发表于 2018-3-6 20:55:55 | 显示全部楼层
你可以每一页抓取完了再 yield 下一页,这样就按顺序来了

举报 使用道具

回复
zzde  新手上路  发表于 2018-3-6 20:59:09 | 显示全部楼层
随便点几页规则就出来了

21593789-{page}

举报 使用道具

回复
locoz  新手上路  发表于 2018-3-6 21:19:43 | 显示全部楼层
@data2world 你要顺序的就别一次性生成所有页数的 url 啊,每次爬完判断一下有没有下一页,有的话当前页数+1 不就 ok 了

举报 使用道具

回复
data2world  新手上路  发表于 2018-3-6 21:28:33 | 显示全部楼层
@Zzde。。。。你都没看懂我的问题,

举报 使用道具

回复
data2world  新手上路  发表于 2018-3-6 21:44:19 | 显示全部楼层
@locoz js 找不到下一页,而且+1 的话并不是顺序的,因为没有阻塞,他可能回爬取后面的之后,再爬取前面的。

举报 使用道具

回复
locoz  新手上路  发表于 2018-3-6 21:59:15 | 显示全部楼层
@data2world 所以说你不要一次性生成所有页的 url 丢进去不就完事了 你没给它丢后面页面的任务它怎么会爬后面的。。

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表