我得到这段代码的目的是获取HTML代码,并使用bs4对其进行刮取
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
myUrl = '' #Here goes de the webpage.
# opening up connection and downloadind the page
uClient = uReq(myUrl)
pageHtml = uClient.read()
uClient.close()
#html parse
pageSoup = soup(pageHtml, "html.parser")
print(pageSoup)
但是,它不起作用,以下是终端显示的错误:
Traceback (most recent call last):
File "main.py", line 7, in <module>
uClient = uReq(myUrl)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 531, in open
response = meth(req, response)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 640, in http_response
response = self.parent.error(
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 569, in error
return self._call_chain(*args)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 502, in _call_chain
result = func(*args)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
您收到的HTTP 403错误意味着web服务器拒绝了脚本对页面的请求,因为它没有访问该页面的权限/凭据
我可以从这里访问您示例中的页面,因此最可能发生的情况是web服务器注意到您试图刮取它,并禁止您的IP地址请求更多页面。Web服务器通常这样做是为了防止刮刀影响其性能
该网站明确禁止您在此处试图执行的操作:https://www.idealista.com/ayuda/articulos/legal-statement/?lang=en
因此,我建议您联系网站所有者,请求使用API(但这可能不是免费的)
您缺少站点可能需要的某些标题
我建议使用
requests
包而不是urllib
,因为它更灵活。请参见下面的工作示例:从那里,您可以使用bs4解析正文:
但是,请注意,您试图抓取的站点可能会显示验证码,因此您可能需要旋转
user-agent
头和IP地址相关问题 更多 >
编程相关推荐