【发布时间】:2011-08-10 23:54:13
【问题描述】:
我是 Python 新手,如果这是一个新手问题,我很抱歉。
我正在尝试构建一个涉及网页抓取的程序,我注意到 Python 3 的网页抓取模块似乎比 Python 2.x 系列少得多。
Beautiful Soup、mechanize 和 scrapy——向我推荐的三个模块——似乎都不兼容。
我想知道这个论坛上是否有人可以选择使用 python 3 进行网页抓取。
任何建议将不胜感激。
谢谢, 会
【问题讨论】:
我是 Python 新手,如果这是一个新手问题,我很抱歉。
我正在尝试构建一个涉及网页抓取的程序,我注意到 Python 3 的网页抓取模块似乎比 Python 2.x 系列少得多。
Beautiful Soup、mechanize 和 scrapy——向我推荐的三个模块——似乎都不兼容。
我想知道这个论坛上是否有人可以选择使用 python 3 进行网页抓取。
任何建议将不胜感激。
谢谢, 会
【问题讨论】:
lxml.html 在 Python 3 上工作,至少可以解析 html。
BeautifulSoup 4 正在开发中,应该支持 Python 3(我已经在这方面做了一些工作)。
【讨论】:
python3-lxml。 BeautifulSoup 4 将使用 lxml(或其他解析器),并专注于访问 DOM 的方法。所以它将受益于 lxml 的速度。
我是新手,但我发现BeautifulSoup 4 非常好,我正在学习并使用这个与requests 和lxml 模块。 requests 模块用于获取 url 和 lxml(您也可以使用内置的 html.parser 进行解析,但我猜 lxml 更快)用于解析。
简单的用法是:
import requests
from bs4 import BeautifulSoup
url = 'someUrl'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
如何从 html 中获取 href 的不简单示例:
links = set()
for link in soup.find_all('a'):
if 'href' in link.attrs:
links.add(link)
然后你会从你的 url 中获得带有唯一链接的 set。
如何解析 html 的特定部分的其他示例,例如如果您希望解析所有具有testClass 类的<p> 标签:
list_of_p = []
for p in soup.find_all('p', {'class': 'testClass'}):
for item in p:
list_of_p.append(item)
你可以用它做很多事情,就像看起来一样简单。
【讨论】: