我是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
我意识到这可能是常见问题中概述的一个糟糕的问题,但我希望有人可以在抓取网站时提供一些一般指导和要考虑的事项。
答案 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解析它。