我正在用漂亮的汤刮碎一个地方。
代码:
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
答案 0 :(得分:0)
当我尝试运行部分代码时,我发现了一个错误:
之后,我尝试使用请求:
>>> 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"}
除了这些值之外,您还可以替代自己的值。最简单的方法是在浏览器中使用Network Analiser(在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)