解析源代码时出现正则表达式问题

时间:2019-08-22 01:32:01

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

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

例如,让我们来看看这个亚马逊产品。

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

1 个答案:

答案 0 :(得分:1)

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

requests documentation很清楚:

  

...对于非文本请求,以字节为单位访问响应正文:

>>> r.content

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

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

>>> source.text

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

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

相关问题