我将从网页上抓取NFL深度图,例如https://www.ourlads.com/nfldepthcharts/archive/220/BUF。现在,我想获得指向此类页面的所有链接,但是下拉菜单“存档日期”的源代码不包含任何链接:
<option value="">-- Archive Dates --</option>
<option value="220">05/01/2019</option>
<option value="219">04/01/2019</option>
<option value="218">03/01/2019</option>
<option value="217">02/01/2019</option>
<option value="216">01/01/2019</option>
<option value="215">12/01/2018</option>
<option value="214">11/01/2018</option>
<option value="213">10/01/2018</option>
<option value="212">09/01/2018</option>
<option value="211">08/01/2018</option>
我阅读了Web scrape get drop-down menu data python帖子,我认为这很有帮助,因为他表示该网页使用了JavaScript。
但是那个答案使用硒。我想知道我是否可以使用scrapy或beautifulsoup解决问题。
以下是我的刮板的结构。
class depth_chart_archive_spider(scrapy.Spider):
name = "depth_chart_archive"
start_urls = ('https://www.ourlads.com/nfldepthcharts/',)
def parse(self, response):
dchome = BeautifulSoup(response.body, 'html.parser')
# get the links somehow
for link in links:
yield scrapy.Request(link, callback = self.parse_team)
def parse_team(self, response):
# parse the page
答案 0 :(得分:1)
您可以使用每个value
标签上的option
参数来构建URL。
例如,引用05/01/2019的菜单的value=220
标签中有option
<option value="220">05/01/2019</option>
点击此菜单时打开的网址是:
https://www.ourlads.com/nfldepthcharts/archive/220/BUF
因此它遵循一种模式,您可以使用以下命令请求所有商品:
site_url = 'https://www.ourlads.com/nfldepthcharts/archive/{code}/BUF'
for code in response.xpath('//option/@value').re(r'\d+'):
yield Request(site_url.format(code=code))
正则表达式只是为了避免请求第一项<option value="">-- Archive Dates --</option>