【问题标题】:python - web scraping BeautifulSoup and urllibpython - 网页抓取 BeautifulSoup 和 urllib
【发布时间】:2016-06-19 06:21:27
【问题描述】:

我正在使用 python 3.4,我的脚本如下所示:

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: Content-Length 应该为 {'User-Agent': 'Mozilla/5.0'} 类型的可迭代数据指定

如何获取 html 代码,然后迭代标签以获取所有国家/地区的列表?

【问题讨论】:

  • 请,请,请使用urllib3
  • urllib 有什么不好?你能举个例子作为解决方案吗?
  • urllib 有许多已知的缺陷,这些缺陷在urllib2urllib3(以及基于urllib3requests)中得到了修复。 urllib 可能会随机失败(尤其是在具有池化的高负载上),而没有任何好的迹象。此外,有了这个库,在社区中,使用最新版本来防止旧的重复出现的问题可能会自动使用新版本解决。
  • 好的,谢谢你的信息。切换到 urllib3,但仍在努力获取 HTML 内容并将其传递给 BeautifulSoup。
  • req = requests.get(url, headers)soup = BeautifulSoup(req.content)

标签: python-3.x web-scraping beautifulsoup urllib


【解决方案1】:

在 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)

进口超出了需要。这只是我使用的刮刀更大部分的 sn-p。我使用了一些正则表达式,因为在我的情况下,我需要的小 sn-ps 在正则表达式中比完整的 beautifulsoup 实现更快。

【讨论】:

  • 谢谢,通过使用网址:embassy-worldwide.com,您将如何从该页面中获取 HTML,以便我可以使用它来抓取页面?
  • r.data 包含 HTTP 响应正文的原始转储。
  • 为一个请求稍微简化了代码。如果不需要,请删除 cookie 条目。
猜你喜欢
  • 2018-02-07
  • 1970-01-01
  • 2018-04-25
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 2022-06-13
相关资源
最近更新 更多