【问题标题】:Unable to parse some content from page source using requests and re无法使用请求解析来自页面源的某些内容并重新
【发布时间】:2021-01-08 09:18:47
【问题描述】:

我正在尝试使用 requests 和 re 模块从网页中解析交易详情。我希望抓取的内容在页面源代码中的某个脚本标记内。当我尝试下面的尝试时,我得到了一部分内容。但是,我希望获得从dealDetailsresponseMetadata 的完整内容。

webpage link

我试过了:

import re
import requests

link = 'https://www.amazon.co.uk/gp/deals?ref_=nav_cs_gb'

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"}

r = requests.get(link,headers=headers)
deals = re.findall(r"dealDetails[^{]+(.*?}),[\s\S]+responseMetadata",r.text,re.DOTALL)[0]
print(deals)

它当前产生的输出是this

我希望获取的输出是this

如何通过requests and re获取上述内容?

【问题讨论】:

  • 不要发布其他来源的输出/代码。如果该来源停止工作,那么问题/答案将在未来变得不那么有用。如果问题需要任何代码/输出,请将其发布在问题正文中的单独代码块中。
  • 如果我尝试这样re.findall(r"dealDetails[^{]+(.*?)responseMetadata",r.text,re.DOTALL),它可以工作,但包括我不想要的最后一个,"。但是,我希望首先使用正则表达式获得所需的部分,而不需要后处理。
  • 我看到这个帖子很晚了,你的问题已经解决了还是你还在寻找解决方案?
  • 不,还没有解决。感谢您询问@Robo Mop。

标签: python python-3.x web-scraping python-requests re


【解决方案1】:

咳咳,假设我不是白痴,我没有混淆你想要的输出和你得到的输出。

继续前进,这就是我所做的:

\"dealDetails\"\s*:\s*\{[\n\r\s]+(.+?)(?=,?[\n\r\s]+\"responseMetadata\")

regex101.com

所示

说明:

我正在使用积极的前瞻,它告诉正则表达式在某个位置,应该有一些东西在文本中的那个位置之后。在我们的例子中,匹配应该在一个位置结束,后面跟着一个逗号、多个换行符和空格,最后是"responseMetadata"。正如您在提供的链接中看到的那样,整个比赛都是 dealDetails 直到结束,第二组是您想要的输出。

再一次,让我们假设我只是无法阅读,这就是为什么我把你得到的输出和你预期的结果搞砸了

【讨论】:

  • 它似乎以正确的方式工作。顺便说一句,这是一个巨大的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多