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