【问题标题】:How to simulate drop down selection and updated table load with scrapy?如何使用scrapy模拟下拉选择和更新表加载?
【发布时间】:2020-02-25 06:40:21
【问题描述】:
我正在尝试从investing.com/equities页面上的“道琼斯工业平均指数”下拉列表开始在invest.com中加载有关每个股票页面的信息
我一直在考虑用scrapy搭配
options = response.css("select[class=stocksFilter] option[id=166]")
但这并不模拟选择动作。
选择动作后,我将逐个浏览#cross_rate_markets_stocks_1中的表格项目,并递归地爬取那些股票页面
你能指出如何模拟点击动作吗?
【问题讨论】:
标签:
scrapy
css-selectors
web-crawler
【解决方案1】:
选择动作是用户与浏览器 UI 的交互,但 scrapy 不呈现网页,我们无法模拟用户交互或使用它运行 Javascript。但是,如果您有兴趣通过模拟用户交互进行抓取,selenium 可能是您的好工具。
回到问题,如果我们要使用 scrapy 进行抓取,我们应该关注发送给目标/由目标发送的 请求 和 响应网站,您可以将它们登录到浏览器的开发人员工具中。打开开发者工具后,点击下拉菜单,可以看到对应的请求发送到了这个url:
https://cn.investing.com/equities/StocksFilter?noconstruct=1&smlID=0&sid=&tabletype=price&index_id=166
这是一个GET请求,index_id分配了选定的股票ID,您可以从https://investing.com/equities的HTML元素中获取股票ID和名称
'xpath of stock ID: //*[@id="stocksFilter"]/option/@id'
'xpath of stock Name: //*[@id="stocksFilter"]/option/text()'