【问题标题】:Issue with regular expressions while parsing source code [closed]解析源代码时出现正则表达式问题[关闭]
【发布时间】:2019-08-22 01:32:01
【问题描述】:

我试图从页面源代码中获取一些信息。

例如,让我们以这个亚马逊产品为例。

https://www.amazon.com/gp/product/B07PWCJZJ6?pf_rd_p=2d1ab404-3b11-4c97-b3db-48081e145e35&pf_rd_r=0PF9KX04Y9GAPGCXBDAP

我们可以查看源代码

查看源代码:https://www.amazon.com/gp/product/B07PWCJZJ6?pf_rd_p=2d1ab404-3b11-4c97-b3db-48081e145e35&pf_rd_r=0PF9KX04Y9GAPGCXBDAP

我的目标是获取一些数据,例如产品描述(例如 1366x768 LED 显示屏)

我基本上是获取整个源代码,然后使用正则表达式来获取我需要的数据。

我正在做这样的事情:

import requests

    source = requests.get(someUrl)
    data = re.findall(r'<span class=\"a-list-item\">(.*?)<\/span><\/li>', source.content)

这应该给我每个产品描述,但我不断收到TypeError: cannot use a string pattern on a bytes-like object

我不知道是我的正则表达式错误还是source.content 没有给我源代码

【问题讨论】:

  • Regex 通常不是解析 HTML 的正确工具。阅读 Python 的 Beautiful Soup 库以获得更好的选择。
  • 我想明确说明您想要从页面中获得什么信息,而不是一般的“每个产品描述”......例如,您是否希望底部有整个比较表?

标签: regex python-3.x web-scraping


【解决方案1】:

正如诊断所解释的,正则表达式库需要一个字符串输入,而不是字节。

requestsdocumentation 很清楚:

... 对于非文本请求,以字节形式访问响应正文:

>>> r.content

假设您检索了一些 HTML 文本 你会想要解码它, 或者让图书馆为你解码:

>>> source.content.decode(source.encoding)

>>> source.text

两个表达式都返回一个 Unicode 字符串, 这将是该正则表达式的 完美 输入。

单独的项目:制作Soup,而不是正则表达式——bs4 是更合适的工具,在这里。

【讨论】:

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