Python Web 抓取 - 403 错误

Posted

技术标签:

【中文标题】Python Web 抓取 - 403 错误【英文标题】:Python Web Scrape - 403 Error 【发布时间】:2018-06-13 09:07:28 【问题描述】:

我正在尝试使用 python beautifulsoup 和 urllib 打开这个网站,但我不断收到 403 错误。有人可以指导我解决这个错误吗?

我当前的代码是这样的;

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://www.cubesmart.com/florida-self-storage/st--petersburg-self-storage/3337.html?utm_source=local&utm_medium=organic&utm_campaign=googlemybusiness&utm_term=3337'

uClient = uReq(my_url)

但我收到 403 错误。

我四处搜索并尝试使用以下方法,但它也给了我同样的错误。

from urllib.request import Request, urlopen
url="https://www.cubesmart.com/florida-self-storage/st--petersburg-self-storage/3337.html?utm_source=local&utm_medium=organic&utm_campaign=googlemybusiness&utm_term=3337"
req = Request(url, headers='User-Agent': 'Mozilla/5.0')

web_byte = urlopen(req).read()

webpage = web_byte.decode('utf-8')

感谢任何帮助。

【问题讨论】:

听起来很奇怪,看来您必须提供一些身份验证,因为 403 意味着服务器拒绝连接:[description][1],但是这些链接不应该需要任何! [1]:en.wikipedia.org/wiki/HTTP_403 有什么理由不使用requests 库,OP? @Petar - 没有理由。我仍然是 python 的初学者,不熟悉请求库。你能指导我吗? requests 模块未安装在 3.8 中,这对我来说是造成与 urllib2、urllib3 和消除歧义的基本指针稀缺的混淆的原因。使用请求模块无法获得太多乐趣,它没有返回会话。它是如何获取会话对象的? 【参考方案1】:

尝试使用requests中的session(),如下所示:

import requests

my_session = requests.session()
for_cookies = my_session.get("https://www.cubesmart.com")
cookies = for_cookies.cookies
headers = 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0'
my_url = 'https://www.cubesmart.com/florida-self-storage/st--petersburg-self-storage/3337.html?utm_source=local&utm_medium=organic&utm_campaign=googlemybusiness&utm_term=3337'

response = my_session.get(my_url, headers=headers, cookies=cookies)
print(response.status_code)  # 200

【讨论】:

@Andersson - 谢谢,这可以打开 url,但是我从这里去哪里呢?我需要编写一个循环来抓取网站的某些部分。如何打印出需要捕获并写入 csv 文件的数据所在位置的 html 部分? 我更喜欢使用lxml.html 进行网页抓取。您可以import lxml.html,获取页面HTML source = lxml.html.fromstring(response.content),然后例如获取所有链接文本节点为print([link.text for link in source.xpath("//a[text()]")]) @ Andersson - 从未遇到过 lxml.html。我得仔细看看它是怎么回事。我假设它具有抓取页面一部分的功能,循环通过我正在寻找的特定标准,然后移动到下一部分等等。例如;获取中 10x10 单位描述、价格、旧价格等,然后向下移动到 9x10 并对所有中号重复,然后移动到大号。 @D-Ru,它可以让你刮掉你想得到的一切。当然,您应该熟悉 XPath 1.0 或 CSS 语法才能轻松定位所需节点... @ Andersson - 这可能有点超出我的想象,但我会读到它。谢谢

以上是关于Python Web 抓取 - 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

Web抓取导致403 Forbidden Error

使用 Mechanize 进行抓取,遇到 HTTP 错误 403

网络抓取 ESPN 的 NBA 数据时,有没有办法修复 HTTP 错误 403?

使用 HttpWebRequest.GetResponse() 进行屏幕抓取时出现错误“远程服务器返回错误:(403) Forbidden”

Python请求响应403被禁止

Python 使用 urllib2 抓取网页 Http 错误 500