【发布时间】:2020-03-18 16:55:02
【问题描述】:
我正在学习如何使用 python 抓取网站,目前只使用 requests 和 BeautifulSoup...
我正在尝试访问以下页面:https://marketchameleon.com/Overview/BAX/Earnings/Earnings-Dates
是的,您需要订阅才能查看所有数据,但这仅用于学习目的,因此浏览器中可见的少量数据就足够了。
这是我获取数据的方式:
import requests
import urllib.request
from bs4 import BeautifulSoup
headers_Get = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'DNT': '1',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
url = 'https://marketchameleon.com/Overview/BAX/Earnings/Earnings-Dates'
response = requests.get(url, headers_Get)
soup = BeautifulSoup(response.text, “html.parser”)
但是,返回的 html 数据似乎是加密的(只是一个摘录,因为加密的部分很长):
<div class="symov_earnings">
<div class="flex_container_between flex_center_vertical">
<div class="dl-tbl-outer"><div class="dis-prem"><button class="_noprem prem-btn" onclick="site_OpenPremium();">Download Now</button><div class="dis-prem-pop"><p>Premium Feature</p><p><a href="/Account/Login">Login</a><span>|</span><a href="/Subscription/Compare">Subscribe</a></p></div></div></div>
</div>
<div cipherxx="OwA+ADwAOQA+ADwABABEAFcAVgBdAFYAEwBfAFwADQAUAEcASABeAGwAUABNAEQAaQBRAFAAQQBdAF8AVgBXAEUAFgARAFAAXwBXAEsAQwALABYAXABDAGwAWgBRAFcAXgBAAFMAXABBAFIAXQBCABQACgA8ADkAEwAWABgAEAAKAEAAWQBWAFIAUgAGAD0APAAUABEAEwATABYAGAAQABYACABFAEEAEwBVAFQAUQBFAEcADAARAF4AVwBRAF4AaQBcAFQAUgBXAF8AVgBXABQACgA8ADkAEwAWABgAEAAWABQAEQATABMAFgAYABAACgBAAFkAEwBQAFkAVABDAEYAVQBfAA4AEQAOABoADgBjAEQAUgBcAF4AXwBWAFcAFgBxAFAAQQBdAF8AVgBXAEUACAAeAEcAWwAIADUAOgAWABQAEQATABMAFgAYABAACgAbAEUAQQANA
有什么方法可以查明发生了什么(如何保护网站免受爬虫的侵害?)并获取实际的 html 数据?
谢谢
【问题讨论】:
-
你可能被屏蔽了,我已经试过你的代码了。你可以检查状态码打印(response.status_code)
-
@m-zayan 被告知不被视为
block的类型,该站点在页面加载后动态运行JavaScript代码,因此,cipherxx是一种@987654327 @ 为HTML解码器持有value -
感谢 @αԋɱҽԃαмєяιcαη 先生,当我运行相同的代码时,一切正常。我正在从不同的服务器运行相同的代码。这就是为什么我猜他可能被阻止了。
-
@m-zayan 这可能是由于
request本身使用的区域或后端dns。您可以通过curl或r.status_code进行验证
标签: python web-scraping beautifulsoup