Python中的屏幕抓取

时间:2011-06-30 03:24:05

标签: python screen-scraping

我是Python的整个屏幕抓取概念的新手,虽然我在R中做了一些屏幕抓取。我正在试图抓住Yelp网站。我正试图抓住yelp搜索返回的每个保险机构的名字。对于大多数抓取任务,我能够执行以下任务,但是在解析xml时总是很难。

import urllib2
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen('http://www.yelp.com/search?find_desc=insurance+agency&ns=1&find_loc=Austin').read())

print soup

因此,在抓取网站时,应遵循哪些步骤?每次他们试图刮取网站时,是否需要采取一系列必要的措施?

我在Ubuntu 10.10上运行Python 2.6

我意识到这可能是常见问题中概述的一个糟糕的问题,但我希望有人可以在抓取网站时提供一些一般指导和要考虑的事项。

3 个答案:

答案 0 :(得分:4)

我建议你阅读xpath&试试这个scrapy教程。 http://doc.scrapy.org/intro/tutorial.html。写这样的蜘蛛很容易

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class DmozSpider(BaseSpider):
    name = "dmoz.org"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]
def parse(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//ul/li')
    for site in sites:
        title = site.select('a/text()').extract()
        link = site.select('a/@href').extract()
        desc = site.select('text()').extract()
        print title, link, desc

答案 1 :(得分:2)

为了简化与屏幕抓取相关的常见任务,存在一个python框架“Scrapy”。它将使html,xml解析变得轻松。

答案 2 :(得分:2)

您可能遇到的问题是您在解析使用javascript动态生成的内容时遇到问题。我写了一个关于这个主题的小教程,这可能会有所帮助:

http://koaning.github.io/html/scapingdynamicwebsites.html

基本上你做的是你有selenium库假装它是一个firefox浏览器,浏览器将等到所有javascript加载后继续传递你的html字符串。一旦你有了这个字符串,你就可以用beautifulsoup解析它。