【问题标题】:web scraping using beautiful soup使用美丽的汤进行网页抓取
【发布时间】:2020-04-06 10:51:08
【问题描述】:

我正在使用漂亮的汤抓取一个网站。

代码:

    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

【问题讨论】:

  • 尝试获取带有“请求”的页面,如stackoverflow.com/questions/42841271/…
  • 如果您的错误来自o = containerClass(current_data) 行,请向我们展示containerClass 的定义并发布完整的回溯。

标签: python beautifulsoup


【解决方案1】:

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

之后我尝试使用请求:

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

你得到了代码 403 - 这意味着服务器理解了请求但拒绝授权它。您可以获取有关该here的更多信息

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

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)

但在这种情况下,问题就不同了。您尝试访问的网站根本不起作用:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多