如何废弃响应为html/text而不是json的具有无限滚动的web页面。
我的第一次尝试是使用Rule和LinkExtractor,这使我获得了大约80%的作业url
class JobsetSpider(CrawlSpider):
name = 'test'
allowed_domains = ['jobs.et']
start_urls = ['https://jobs.et/jobs/']
rules = (
Rule(LinkExtractor(allow='https://jobs.et/job/\d+/'), callback='parse_link'),
Rule(LinkExtractor(), follow=True),
)
def parse_link(self, response):
yield {
'url': response.url
}
我的第二个尝试是使用SCRAPING INFINITE SCROLLING PAGES中的示例,但是响应是text/html而不是json。
当点击“加载更多”按钮时,我可以在Chrome开发工具的网络上看到请求url
https://jobs.et/jobs/?searchId=1509738711.5142&action=search&page=2
而“页面”的数量增加。
我的问题是
忽略“加载更多”按钮。
正如您所提到的,您可以使用url访问作业的所有页面。分析结果的第一页时,请从header元素中查找作业总数
该网站每页显示20个作业,因此您需要刮取268/20=13.4(四舍五入到14)页。
解析完第一个页面后,创建一个生成器以生成后续页面的url(最多14个循环),并使用另一个函数解析结果。您将需要
searchId
,您无法从URL中获取,但它位于页面上的隐藏字段中。使用这个和页码,你可以建立你的网址
是的,parse函数的工作方式与第一页解析器完全相同,但是当您完成所有工作时,最好使用代码复制来保持头脑清醒。
代码可能是
您可以添加如下内容:
相关问题 更多 >
编程相关推荐