Scrapy文件- @href返回意外值

5t7ly7z5  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(123)

我目前正在从Tripadvisor网站上抓取餐厅评论,我正试图从这个page中检索餐厅链接。
我想在底部的30个餐厅网页的链接,但我只是其中之一做一些测试。检索列表中的第一个可以通过以下表达式完成:

//div[@data-test='1_list_item']/div/div[2]/div[1]/div//a/@href

Scrapy有一些意想不到的行为,下面的css表达式应该足以检索所有链接,但相反,返回一个空数组:

response.css('.b::attr(href)').extract()

这同样适用于许多XPath表达式,并通过使用上面的一个这样:

response.xpath("//div[@data-test='1_list_item']/div/div[2]/div[1]/div//a/@href").get()

我得到以下链接作为回报:

/ShowUserReviews-g187791-d25107357-r916086825-ADESSO_Vineria_Bistrot-Rome_Lazio.html

我不知道这是从哪里来的,我可以在检查Chrome控制台看到的链接,我希望得到的回报是:

/餐厅_Review-g187791-d25107357-Reviews-ADESSO_Vineria_Bistrot-Rome_Lazio.html

anhgbhbe

anhgbhbe1#

您在使用Scrapy时遇到的问题可能是由于TripAdvisor网站使用JavaScript加载数据源,而Scrapy默认情况下不支持JavaScript。因此,当您尝试使用response.cssresponse.xpath获取链接时,Scrapy只能看到页面的初始状态,而不会加载加载的数据。
要检查已加载的页面,请使用open_in_browser()函数,并在编写xpath或css选择器之前阅读列出所需数据的位置。
检查它:https://docs.scrapy.org/en/latest/topics/dynamic-content.htmlhttps://docs.scrapy.org/en/latest/topics/debug.html

# import this util
from scrapy.utils.response import open_in_browser

# in spider class
... 
def parse_details(self, response):
    open_in_browser(response)
...

如果在使用这个示例时遇到问题,那么可以调用response.text并检查响应页面的当前内容

fruv7luv

fruv7luv2#

我使用SIM建议的xpath表达式解决了我的问题:
//div[contains(@data-test,'_list_item')]//div/div/div/span/a[starts-with(@href,'/Restaurant_Review')]/@href

相关问题