【问题标题】:How to send http post request to expand text on webpage如何发送http post请求以扩展网页上的文本
【发布时间】:2019-06-30 08:43:08
【问题描述】:

我通过抓取一些tripadvisor 景点来学习Scrapy。 (例如此页面:https://www.tripadvisor.com/Attractions-g187791-Activities-Rome_Lazio.html)。我面临的一个问题是,如果评论超过一定长度,它将显示一个“更多”按钮,然后使用 javascript 扩展文本。我无法发布扩展这些评论文本的请求。

遵循此处给出的建议:Click a Button in Scrapy

我已获取发布请求: 请求地址:https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS_RESP&metaReferer=

请求 方法:POST

在scrapy shell中我尝试了以下方法:

from scrapy.http.request import Request 
fetch("https://stackoverflow.com/questions/6682503/click-a-button-in-scrapy")
Request(url="https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS_RESP&metaReferer=",method="POST")   

然后通过调用比较所述评论的结果:

response.css("p.partial_entry").getall()        

与堆栈示例不同,它没有要发送的表单,而只有一个简单的请求,即扩展文本。 1 单击“更多”按钮可展开页面上的所有案例。所以我希望这种方法可以扩展所有文本,但它不会扩展任何内容,也不会更改页面上的任何内容。

我的主要问题是由于我正在使用 scrapy shell 或 bash 进行测试,因此我很难进行测试。

【问题讨论】:

  • 从 Scrapy 发送一个 post 请求不可能改变你已经下载的页面上的任何东西。
  • 这是有道理的。我的方法应该是向 post 请求中的 url 发送单独的请求吗?
  • 如果您查看他们如何执行该 POST 请求,您会注意到他们发送了额外的请求标头和请求正文。如果你能弄清楚从哪里获得所有这些信息,那么你可能会尝试继续你所做的事情。但是,为了处理这种 Javascript 行为,我建议您查看Splash 及其Scrapy integration。它更复杂,但允许您实际单击链接以加载额外的文本。

标签: python post request scrapy screen-scraping


【解决方案1】:

Request(…) 实际上并没有获取该请求并相应地更新response。请改用fetch(Request(…))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多