Web抓取:返回单个脚本而不是完整的源代码(python请求)

2024-06-23 20:14:07 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我试图从一个网站获取源代码,以便在GUI中显示一些信息供个人使用。直到今天天气都很好。请求正在返回:

<script type="text/javascript">
//<![CDATA[
try{if (!window.CloudFlare) {var CloudFlare=[{verbose:0,p:1488589563,byc:0,owlid:"cf",bag2:1,mirage2:0,oracle:0,paths:{cloudflare:"/cdn-cgi/nexp/dok3v=1613a3a185/"},atok:"bf044f0277d5959921a2a72c3d75c8e3",petok:"a032d4a7f881ace71dd54654ee2fd5265b3404f3-1488641637-1800",zone:"<site link here>",rocket:"a",apps:{}}];document.write('<script type="text/javascript" src="//ajax.cloudflare.com/cdn-cgi/nexp/dok3v=f2befc48d1/cloudflare.min.js"><'+'\/script>');}}catch(e){};
//]]>
</script>

我读过什么是CloudFlare及其火箭脚本,尝试过其他用户代理,并使用了一个处理CloudFlare防ddos系统的库(我认为本网站不使用该库,它也没有“检查浏览器(…)”或验证码)。我无法逃避这件事。 这是我代码的一部分:

user_agent = "<an user agent here>"
header = {'User-Agent':user_agent}
r = urllib.request.Request("<website url here>",None,header)
response = urllib.request.urlopen(r)
data = response.read()

然后我分析了信息等等。。。 有没有办法绕过这个?我尝试使用这个library,但无法使其正常工作。 这是我试图从中解析一些信息的link


Tags: text信息here网站typescriptcdncloudflare
1条回答
网友
1楼 · 发布于 2024-06-23 20:14:07

听起来像是Selenium的工作。我在一个受cloudflare ddos保护的网站上试用了它,效果很好:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('/path/to/chromedriver')
driver.get('website-protected-by-cloudflare-ddos')
try:
    # wait until certain element with id 'expected-id' showed up
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'expected-id'))
    )
    # do whatever you want with the page
    print(driver.title)
finally:
    driver.quit()

相关问题 更多 >

    热门问题