
如题。
举个例子:这个网站无法返回下一页。 https://bbs.hupu.com/21593789.html
scrapy shell "https://bbs.hupu.com/21593789.html" print response.body body中没有next page属性 。什么原因啊?怎么解决?
1 welkinzh 2018 年 3 月 5 日 网页源代码里确实没有这个属性,应该是 js 加载的 |
2 locoz 2018 年 3 月 5 日 |
3 data2world OP @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 ``` |
4 flyxl 2018 年 3 月 5 日 via Android 为什么一定要按页爬呢?是增量爬取还是数据库记录要有序?如果是数据库记录的问题,入库的时候记录一下当前是第几页 |
5 data2world OP @flyxl 因为我需要爬所有的分页页面爬完之后合并成一个 list,在赋给父 item。但是 yield 是异步的,所以不能以 for 循环的执行次数判断是否爬取完了。 |
6 NLL 2018 年 3 月 5 日 你可以每一页抓取完了再 yield 下一页,这样就按顺序来了 |
7 Zzde 2018 年 3 月 5 日 随便点几页规则就出来了 21593789-{page} |
8 locoz 2018 年 3 月 5 日 via Android @data2world 你要顺序的就别一次性生成所有页数的 url 啊,每次爬完判断一下有没有下一页,有的话当前页数+1 不就 ok 了 |
9 data2world OP @Zzde。。。。你都没看懂我的问题, |
10 data2world OP @locoz js 找不到下一页,而且+1 的话并不是顺序的,因为没有阻塞,他可能回爬取后面的之后,再爬取前面的。 |
11 locoz 2018 年 3 月 6 日 @data2world 所以说你不要一次性生成所有页的 url 丢进去不就完事了 你没给它丢后面页面的任务它怎么会爬后面的。。 |