首页 > 解决方案 > 使用美丽的汤进行网页抓取

问题描述

我正在用漂亮的汤来一个网站。

代码:

    from bs4 import BeautifulSoup as soup
    
    from urllib.request import urlopen as uReq
    my_url = 'https://www.bewakoof.com/biker-t-shirts'
    uClient = uReq(my_url)
    
    
    page_html = uClient.read()
    uClient.close()
    page_soup = soup(page_html, "html.parser")
    
    containers = page_soup.findAll("div", {"class": "productGrid"})
    
    print(len(containers))

我收到下面提到的错误。

错误

o = containerClass(current_data)
TypeError: __init__() takes 1 positional argument but 2 were given

标签: pythonbeautifulsoup

解决方案


当我尝试运行您的部分代码时,我发现了一个错误:

在此处输入图像描述

之后我尝试使用请求:

>>> my_url = 'https://www.bewakoof.com/biker-t-shirts'
>>> import requests as re
>>> r = re.get(my_url)
>>> r
<Response [403]>

你有代码 403 - 这意味着服务器理解请求但拒绝授权它。你可以在这里获得更多信息

大多数情况下,此错误与解析器的原始保护有关。要解决此问题,请使用以下方法:您必须使用deceive您是浏览器的站点的标头为此下载请求库 ,然后创建一个字典

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}

您可以用自己的值代替这些值。最简单的方法是在浏览器中使用网络分析器(在 Chrome 中按 F12) 在此处输入图像描述

然后

import requests as req
url = "url"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}
r = req.get(url, headers)

但在这种情况下,问题就不同了。您尝试访问的网站根本不起作用: 在此处输入图像描述


推荐阅读