python - 使用美丽的汤进行网页抓取
问题描述
我正在用漂亮的汤来刮一个网站。
代码:
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
解决方案
当我尝试运行您的部分代码时,我发现了一个错误:
之后我尝试使用请求:
>>> 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)
推荐阅读
- java - “将 STDOUT 复制到文件而不停止它在屏幕上显示”中的示例不起作用
- arrays - 如何判断追加是否创建了新的底层数组
- c# - 协助 C# LDAP 查询
- javascript - 每当我向下滚动并点击汉堡包图标时,固定定位的标题就会转到最顶部
- google-maps-markers - 使用 MapContainer.addMarker(Component, Coord) 添加标记仅在按下屏幕时有效
- python - 在 Textacy 中计算单个单词的 TD-IDF
- sql-server - 如何根据定义的规则生成不包括节假日的工作日日期列表
- ios - 在 MTLComputePipelineState 上,什么决定了 maxTotalThreadsPerThreadgroup?
- hadoop - 调整 Hadoop 参数
- verilog - 如何使用/调用其他模块来实现自己的与非门?