Advertisement

python抓取网页内容到excel,python爬虫抓取网页数据

阅读量:

您好!今天向大家介绍Python网页数据抓取淘宝全过程代码!很多人都不了解这一技术的应用场景和操作流程!下面将为您详细讲解相关知识!接下来我们将带您深入探讨这一技术的实现细节!

来源于: dustin的博客 - Python写爬虫——抓取网页并解析HTML

本学期CUHK开设了一门名为《Semantic Web》的课程;其项目要求学生将整个系的教授信息整理到一个系统中;该系统应能回答如"选修A教授课程后受限于时间冲突,则B教授开课不可选"以及"与A教授实验室相接的是哪些教师的研究室"之类的问题;这便是所谓的语义网系统了啊Python皮卡丘代码……然而项目的难度极大;所有数据都需要手动从系主页上筛选;而项目的参与者多数是人工完成的手工查询;令人无奈的是;参与此项目的同学多为非专业的编程爱好者;他们只能耗时费力地逐一核对数据……而唯一的想法就是开发一个爬虫脚本

从网页上获取相关信息确实是一个普遍性的问题,在未来我可能会经常遇到这种情况。不过幸运的是这个项目只需要我们系所有教授的信息所以只需用手动操作就显得力不从心了。如果需要获取的信息量非常庞大比如将淘宝网站的商品目录全部提取出来那岂不是要花费大量时间和精力?于是我想深入研究一下相关的爬虫技术。

曾编写过一个Java应用程序,在该系统中采用了HTML Parser工具(参考来源:http://htmlparser.sourceforge.net/)来解析团长网站meituan.com上的每日团购信息,并将这些数据存储到数据库中。稍作修改后又加入了拉手、糯米等平台的数据爬取功能,并开发了一个前端页面作为专门提供团长服务的平台。测试运行后发现该系统完全实现了预期功能且操作简便。

然而我觉得Java确实有些冗长而显得简短。Python作为一种脚本语言其开发效率相当高。一个鲜活的案例显示由于政策调整veryCD网站开始自我限制访问。一些网友为了备份资源专门爬取了整个veryCD网站。镜像可用SimpleCD.org获取。查看了相关爬虫的源代码发现其实并不复杂。

复制代码
    python sitecopy.py http://www.163.com

看看效果:网易

1. 获取html页面

其实,最基本的抓站,两句话就可以了

复制代码
 import urllib2

    
 content = urllib2.urlopen('http://XXXX').read()

通过这种方式可以获取全部的HTML文档内容。核心问题在于我们实际上只需要从该文档中提取所需的信息而非全部内容。这就要求对包含多种标签标记的HTML进行解析处理。

2. 解析html

SGMLParser

Python内置了HTMLParser以及SGMLParser等其他解析器。这个解析器运行非常快。为了验证其高效性,我编写了一个简单的测试示例.

复制代码
 import urllib2

    
 from sgmllib import SGMLParser
    
  
    
 class ListName(SGMLParser):
    
 	def __init__(self):
    
 		SGMLParser.__init__(self)
    
 		self.is_h4 = ""
    
 		self.name = []
    
 	def start_h4(self, attrs):
    
 		self.is_h4 = 1
    
 	def end_h4(self):
    
 		self.is_h4 = ""
    
 	def handle_data(self, text):
    
 		if self.is_h4 == 1:
    
 			self.name.append(text)
    
  
    
 content = urllib2.urlopen('http://list.taobao.com/browse/cat-0.htm').read()
    
 listname = ListName()
    
 listname.feed(content)
    
 for item in listname.name:
    
 	print item.decode('gbk').encode('utf8')

注意:我的电脑是win7中文系统,为了避免出现乱码,最后一行使用

复制代码
 for item in listname.name:

    
 	print item

很容易定义了一个名为ListName的类,并使其继承自SGMLParser的方法。利用一个标记变量is_h�来判断HTML文件中的h�标签。当遇到h�标签时,则将其中的内容添加到List变量name中。详细解释start_h�()和end_h�()这两个函数的作用, 它们属于SGMLParser类中

start_tagname(self, attrs)
end_tagname(self)

tagname代表标签名称,在遇到<pre>时会触发start_pre函数,在遇到</pre>时会触发end_pre函数。attrs包含指定标签的所有属性及其对应值,并按照[(属性, 值), ...]的形式传递给相关处理函数进行操作。

输出:

复制代码

出现乱码现象?那可能与网页编码设置不符吧?建议修改最后一条decode函数的参数设置,在使用香港地区(即简体中文)时可能会遇到问题哦。如果需要尝试的话,请通过抓取淘宝的商品目录来获取基础信息。稍作调整就能提取二级分类以及其他所需信息。

pyQuery

该工具实现了 jQuery 的核心功能,并且其官方名称为 "pyQuery"。它支持基于 jQuery 的方法来进行 HTML 文档的解析与操作。使用前需进行必要的准备工作,并通过简单的安装命令即可获取;同时,在 Ubuntu 系统中也可以轻松地完成安装。

复制代码
    sudo apt-get install python-pyquery

以下例子:

复制代码
 from pyquery import PyQuery as pyq

    
 doc=pyq(url=r'http://list.taobao.com/browse/cat-0.htm')
    
 cts=doc('.market-cat')
    
  
    
 for i in cts:
    
 	print '====',pyq(i).find('h4').text() ,'===='
    
 	for j in pyq(i).find('.sub'):
    
 		print pyq(j).text() ,
    
 	print '\n'

BeautifulSoup

虽然存在不少问题令人困扰的挑战在于大多数网页并没有严格遵循规范写作造成各种意想不到的技术错误对此感到非常失望

BeautifulSoup功能强大,我还在研究中,有进展会更新本文。

全部评论 (0)

还没有任何评论哟~