2016-01-20 34 views
-1

我以前工作的网络刮刀。但是,它是专门从刮网站最近已改为使用HTTPS,使得下面不再工作相关的代码片段。Python的 - 从HTTPS解析HTML使用LXML网址 - urllib2.urlopen解决办法是行不通的

from lxml import html 

    url = 'http://www.blahblah.com' 
    good_data = False 
    while good_data ==False: 
     try: 
      data = html.fromstring(html.tostring(html.parse(url))) 
      good_data=True 
     except Exception: 
      good_data=False 
      print 'scraping failed' 
      winsound.Beep(800,1000) 
      time.sleep(pause) 

以前的数据将被成功解析为'数据',我现在从lxml中得到一个IOError。

我做了一些阅读 - 在这里尤其是:error with parse function in lxml - 我试图实现使用的urllib2将给出解决方案如下:

from lxml import html 
    from urllib import urlopen 

    url = 'http://www.blahblah.com' 
    good_data = False 
    while good_data ==False: 
     try: 
      data = html.fromstring(html.tostring(html.parse(urlopen(url)))) 
      good_data=True 
     except Exception: 
      good_data=False 
      print 'scraping failed' 
      winsound.Beep(800,1000) 
      time.sleep(pause) 

,但现在我回来了错误

"TypeError: expected string or buffer". 

这会发生是否我从http或https://www.blahblah.com刮。

无论是对原来的问题或修复原始问题的修复程序的修复,将不胜感激。

+1

您是否尝试过'请求? – alecxe

+0

刚刚尝试过。有没有r = requests.get(url) - 我认为是正确的。它不会把我的任何错误,但实际上并没有,似乎给了我什么,即r.text,r._content都为空 – cmcsorley17

+0

得到它 - 不得不为这里欺骗的Chrome用户代理HTTP://计算器。 com/questions/25491872/python-request-geturl-returns-empty-content让它起作用。 – cmcsorley17

回答

0

使用请求库获取的HTML数据,并使用BeautifulSoup来提取HTML页面中检索数据。

您请求库得到来自网站的数据,这些数据将在HTML

import requests 
url = 'http://www.google.com/search' 
my_headers = { 'User-agent' : 'Mozilla/11.0' } 
payload = { 'q' : 'pizza', 'start' : '0' } 
r = requests.get(url, params = payload, headers = my_headers) 

您可以使用BeautifulSoup库从检索到的数据中提取任何类型的信息(HTML数据)

from bs4 import BeautifulSoup 
soup = BeautifulSoup(r.text, 'html.parser') 

现在如果你想要的文本数据,你可以使用这个功能

soup.getText() 

如果你想要标题或任何其他标签信息,您可以使用,就像我已经检索到所有H3标签

h3tags = soup.find_all('h3', class_='r')