2016-03-05 95 views
0

我使用python 3.4和我的脚本是这样的:蟒蛇 - 网页抓取BeautifulSoup和urllib的

import urllib 
from urllib.request import Request, urlopen 
from urllib.error import URLError, HTTPError 
from bs4 import BeautifulSoup 

url = "http://www.embassy-worldwide.com/" 

headers={'User-Agent': 'Mozilla/5.0'} 
#req = Request(url, headers) 

try: 
    req = urllib.request.Request(url, headers) 
    #print (req) 
except HTTPError as e: 
    print('Error code: ', e.code) 
except URLError as e: 
    print('Reason: ', e.reason) 
else: 
    print('good!') 

print (req) 

#html = urllib.request.urlopen(req) 
with urllib.request.urlopen(req) as response: 
    html = response.read() 
print(html) 

上述导致错误代码:

ValueError异常:内容长度应指定可以迭代的数据{'User-Agent':'Mozilla/5.0'}

如何获取html代码然后遍历标签以获取所有国家的列表?

+0

请使用'urllib3'。 – 2016-03-05 12:47:34

+0

urllib有什么不好?你能举一个例子作为解决方案吗? –

+1

'urllib'有许多已知的缺陷,它们在'urllib2'和'urllib3'(以及'request',它基于'urllib3')中被修复。如果没有任何好的指示,urllib可能会随机失败(特别是在高负载的情况下)。此外,在这个库中,在社区中,使用最新版本来防止旧版本可能会自动解决的问题是很常见的。 – 2016-03-05 12:53:26

回答

2

尝试这种风格在urllib3:

import sys 
import re 
import time 
import pprint 
import codecs 
import unicodedata 
import urllib3 
import json 

urllib3.disable_warnings() 

cookie = '_session_id=29913b5f1b8836d2a8387ef4db00745e' 
header = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17' 
url = 'https://yoururl.com/' 
m = urllib3.PoolManager(num_pools = 15) 

r = m.request('GET', url, None, {'User-Agent' : header, 'Cookie' : cookie}) 

print(r.data) 

的进口超过需要。这只是我使用的刮刀的一大部分的片段。我使用一些正则表达式,因为我需要的小片段在正则表达式中比完整的优化器实现更快。

+0

谢谢,通过使用url:* http://www.embassy-worldwide.com*,你会怎么样该页面的HTML,所以我可以用它来刮页面? –

+1

'r.data'包含HTTP Response主体的原始转储。 – 2016-03-05 12:55:19

+0

为一个请求简化代码。如果不需要,请删除Cookie条目。 – 2016-03-05 13:00:21