0

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

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

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没有给我源代码

4

1 回答 1

1

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

requests 文档很清楚:

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

>>> r.content

鉴于您检索了一些 HTML 文本,您需要对其进行解码,或者让库为您解码:

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

或者

>>> source.text

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

单独的项目: make Soup,而不是 Regexes -bs4是更合适的工具,在这里。

于 2019-08-22T02:03:14.783 回答