【问题标题】:Losing data when scraping with Python?使用 Python 抓取时丢失数据?
【发布时间】:2018-09-16 00:30:57
【问题描述】:

更新(2018 年 4 月 10 日): 所以我发现我的问题是源代码中没有这些信息,这意味着我必须使用 Selenium。

更新:
我更多地解决了这个问题。我所做的是代替或运行汤,我只是将pageH 解码为一个字符串并从中制作一个文本文件,我发现'{{ optionTitle }}' 或'{{priceFormat (showPrice, session.currency)}}' 来自 HTML 文件中单独说明的模板部分。我认为这意味着我只是看错了地方。我仍然不确定,但我是这么认为的。

所以现在我有一个新问题。在查看了文本文件之后,我现在意识到必要的信息甚至不在pageH 中。在它应该给我我正在寻找的信息的地方,它反而说:

<bread-crumbs :location="location" :product-name="product.productName"></bread-crumbs> <product-info ref="productInfo" :basic="product" :location="location" :prod-info="prodInfo"></product-info>

这是什么意思?/有没有办法通过这个来获取信息?

原始问题:

我正在尝试从网站上收集产品的名称/价格。我不确定数据是否由于 html 解析器或 BeautifulSoup 而丢失,但发生的情况是,一旦我到达我想要的位置,返回的而不是特定名称/价格是 '{ { optionTitle }}' 或 '{{priceFormat (showPrice, session.currency)}}'。在我使用pageH = urllib.request.urlopen() 获取网址后,给出此结果的代码是:

pageS = soup(pageH, "html.parser")
pageB = pageS.body
names = pageB.findAll("h4")
optionTitle = names[3].get_text()
optionPrice = names[5].get_text()

因为这不起作用,我尝试以不同的方式进行并寻找更具体的标签,但重要的代码部分没有显示。它完全消失了。我可以做些什么来获得具体的名称/价格,或者这是我无法解决的安全措施吗?

【问题讨论】:

  • 这些双花括号看起来很像 Angular 模板,这可能意味着您需要一个 JavaScript 引擎/浏览器来呈现页面。

标签: python python-3.x web-scraping beautifulsoup urllib


【解决方案1】:

{{}} 语法看起来像 Angular。尝试Requests-HTML 进行渲染(通过使用render())然后获取内容。示例如下:

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('http://python-requests.org/')
r.html.render()
r.html.search('Python 2 will retire in only {months} months!')['months']

'<time>25</time>'

【讨论】:

  • 你能澄清一下在这种情况下应该是什么类型的对象会话吗?
  • "session" 是 requests_html 库中的 HTMLSession 对象。只需编辑上面的回复供您参考。干杯:)
猜你喜欢
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 2021-10-19
  • 1970-01-01
相关资源
最近更新 更多