2016-07-17 47 views
2

我写了一个脚本来抓取网站上的PHP文件中的数据。我编写了脚本,只有当页面上的当前数据与上一次从页面抓取数据时发生了变化,它才会输出数据。该页面确实需要验证,这就是为什么我添加了PHPSESSID。这将允许查看页面。 Cloudflare已实施urllib2绕过cloudflare

在访问website.com之前检查您的浏览器。

该过程是自动的。您的浏览器很快就会重定向到您请求的内容。 请允许长达5秒...

这已经打破了我的脚本,它无法从页面抓取数据。我看着cfscrape,并不知道如何将它实现到我当前的脚本中以使其运行。如果任何人都可以提供非常棒的帮助!我讨厌不得不伸出援手,但我需要尽快让这个功能起作用。

#!/usr/bin/python 

from time import sleep 
import re 
import hashlib 
import urllib2 
import winsound 

def doMd5(data): 
    mdo = hashlib.md5() 
    mdo.update(data) 
    return mdo.hexdigest() 

def doRequest(): 
    try: 
     head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', 
       'Cookie': 'PHPSESSID=ldc1bp9mj7n4ocffvftm25te62'} 
     req = urllib2.Request('http://www.example.com/random/random.php', headers=head) 
     res = urllib2.urlopen(req) 
     data = res.read() 
     return data 
    except: 
     return "exception" 

last_log = "" 

while True: 
    data = doRequest() 

    if data == "exception" or data == "": 
     print "Exception!" 
     continue 

    new_hash = doMd5(data) 

    if new_hash != last_log: 
     print "New Data" 
     winsound.Beep(100, 80) 

      handler = open('data.html', 'a') 
      handler.write(data + '\n') 
      handler.close() 

      last_log = new_hash 
    else: 
     sleep(3) 
     print "Refreshing..." 
     continue 
+0

用[cfscape usage](https://github.com/Anorov/cloudflare-scrape#usage)替换所有的urllib用法...你所需要做的就是获取网站内容,对不对? –

回答

0

CloudFlare的“检测您的浏览器”页面的目的基本上是阻止漫游器。

它在这里正常工作。您需要询问网站所有者为其网站禁用此保护,或者为您制定例外规定。

+0

谢谢船长明显! –