2017-03-04 52 views
1

基本上我试图从一个网站获取源代码来显示GUI中的一些信息供个人使用。直到今天还好。请求已经返回:Web Scrapping:返回一个脚本而不是完整的源代码(python请求)

<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我试图解析一些信息

回答

0

听起来像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() 
相关问题