【问题标题】:Python web scraping returns errorPython网页抓取返回错误
【发布时间】:2013-10-18 13:15:00
【问题描述】:

我目前正在学习 Python,并尝试学习网络抓取。我一直在使用从一些教程中获得的示例代码,但是在我正在查看的网站之一中遇到了问题。以下代码应该返回网站的标题:

import urllib
import re
urls = ["http://www.libyaherald.com"]
i=0
regex='<title>(.+?)</title>'
pattern = re.compile(regex)
while i< len(urls):
    htmlfile = urllib.urlopen(urls[i])
    htmltext = htmlfile.read()
    titles=re.findall(pattern,htmltext)
    print titles
    i+=1

《利比亚先驱报》网站的标题返回了一个错误。我查看了《利比亚先驱报》的源代码,DOC TYPE 是&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

文档类型是否与我无法从中获取信息有关?

【问题讨论】:

  • 正则表达式完全不适合网页抓取,使用 xpath 会更好。还有许多工具可以让您的流程更易于管理和运行,例如scrapy.org

标签: python python-2.7 web-scraping


【解决方案1】:

正如@Puciek 所说,使用正则表达式将很难抓取 html。我建议你开始使用一些包,一个非常易于使用和安装的包是BeautifulSoup

安装后,您可以尝试这个简单的示例:

from bs4 import BeautifulSoup
import requests

html = requests.get('http://www.libyaherald.com').text
bs = BeautifulSoup(html)

title = bs.find('title').text
print title

【讨论】:

    【解决方案2】:

    对于严重的 python 网络抓取,我强烈建议Scrapy

    据我所知,在进行 html 解析时,不推荐使用正则表达式。试试 BeautifulSoup (BS4) 就像比萨人说的:)

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多