Python使用lxml模块和Requests模块抓取HTML页面的教程

Web抓取
Web站点使用HTML描述,这意味着每个web页面是一个结构化的文档。有时从中 获取数据同时保持它的结构是有用的。web站点不总是以容易处理的格式, 如 csv 或者 json 提供它们的数据。

这正是web抓取出场的时机。Web抓取是使用计算机程序将web页面数据进行收集 并整理成所需格式,同时保存其结构的实践。

lxml和Requests
lxml(http://lxml.de/)是一个优美的扩展库,用来快速解析XML以及HTML文档 即使所处理的标签非常混乱。我们也将使用 Requests (http://docs.python-requests.org/en/latest/#)模块取代内建的urllib2模块,因为其速度更快而且可读性更好。你可以通过使用 pip install lxml 与 pip install requests 命令来安装这两个模块。

让我们以下面的导入开始:

from lxml import html
import requests

下一步我们将使用 requests.get 来从web页面中取得我们的数据, 通过使用 html 模块解析它,并将结果保存到 tree 中。

page = requests.get(‘http://econpy.pythonanywhere.com/ex/001.html‘)
tree = html.fromstring(page.text)

tree 现在包含了整个HTML文件到一个优雅的树结构中,我们可以使用两种 方法访问:XPath以及CSS选择器。在这个例子中,我们将选择前者。

XPath是一种在结构化文档(如HTML或XML)中定位信息的方式。一个关于XPath的 不错的介绍参见 W3Schools 。

有很多工具可以获取元素的XPath,如Firefox的FireBug或者Chrome的Inspector。 如果你使用Chrome,你可以右键元素,选择 ‘Inspect element‘,高亮这段代码, 再次右击,并选择 ‘Copy XPath‘。

在进行一次快速分析后,我们看到在页面中的数据保存在两个元素中,一个是title是 ‘buyer-name‘ 的div,另一个class是 ‘item-price‘ 的span:

<div title="buyer-name">Carson Busses</div>
<span class="item-price">$29.95</span>

知道这个后,我们可以创建正确的XPath查询并且使用lxml的 xpath 函数, 像下面这样:

#这将创建buyers的列表:
buyers = tree.xpath(‘//div[@title="buyer-name"]/text()‘)
#这将创建prices的列表:
prices = tree.xpath(‘//span[@class="item-price"]/text()‘)

让我们看看我们得到了什么:

print ‘Buyers: ‘, buyers
print ‘Prices: ‘, prices
Buyers: [‘Carson Busses‘, ‘Earl E. Byrd‘, ‘Patty Cakes‘,
‘Derri Anne Connecticut‘, ‘Moe Dess‘, ‘Leda Doggslife‘, ‘Dan Druff‘,
‘Al Fresco‘, ‘Ido Hoe‘, ‘Howie Kisses‘, ‘Len Lease‘, ‘Phil Meup‘,
‘Ira Pent‘, ‘Ben D. Rules‘, ‘Ave Sectomy‘, ‘Gary Shattire‘,
‘Bobbi Soks‘, ‘Sheila Takya‘, ‘Rose Tattoo‘, ‘Moe Tell‘]

Prices: [‘$29.95‘, ‘$8.37‘, ‘$15.26‘, ‘$19.25‘, ‘$19.25‘,
‘$13.99‘, ‘$31.57‘, ‘$8.49‘, ‘$14.47‘, ‘$15.86‘, ‘$11.11‘,
‘$15.98‘, ‘$16.27‘, ‘$7.50‘, ‘$50.85‘, ‘$14.26‘, ‘$5.68‘,
‘$15.00‘, ‘$114.07‘, ‘$10.09‘]

恭喜!我们已经成功地通过lxml与Request,从一个web页面中抓取了所有我们想要的 数据。我们将它们以列表的形式存在内存中。现在我们可以对它做各种很酷的事情了: 我们可以使用Python分析它,或者我们可以将之保存为一个文件并向世界分享。

我们可以考虑一些更酷的想法:修改这个脚本来遍历该例数据集中剩余的页面,或者 使用多线程重写这个应用从而提升它的速度。

原文地址:https://www.cnblogs.com/zhming26/p/8258590.html

时间: 2024-08-26 03:27:09

Python使用lxml模块和Requests模块抓取HTML页面的教程的相关文章

Python3的requests类抓取中文页面出现乱码的解决办法

这种乱码现象基本上都是编码造成的,我们要转到我们想要的编码,先po一个知识点,嵩天老师在Python网络爬虫与信息提取说到过的:response.encoding是指从HTTP的header中猜测的响应内容编码方式,如果header中不存在charset,则默认编码为ISO-8859-1 ,这样一来某些不规范的服务器返回就必然乱码了:response.apparent_encoding是指从内容中分析出的响应内容编码方式.requests内部的 utils 也提供了一个从返回 body 获取页面

模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块

目录 1. 包 2. time模块 ??1. 优先掌握 2. 了解 3. datetime模块 ??1. 优先掌握 4. random模块 ??1. 优先掌握 ??2. 了解 5. hashlib模块和hmac模块 6. typing模块 7. requests模块 8. re模块 ??1. re模块的正则表达式的元字符和语法 ??2. 贪婪模式和非贪婪模式 ??3. 匹配邮箱实例 ??4. re模块中的常用功能函数 ??5. 修饰符 re.S ??6. 补充 目录 \1. 包 1. 优先掌握

【Python】Python抓取分享页面的源代码示例

本文章是关于利用Python方法来抓取某网站分享页面中的源码方法示例.需要大家注意的是Python抓取分享页面的源代码示例,是要在运行时导入BeautifulSoup.py文件后才可以使用. Python抓取分享页面的源代码示例,需要用到python urllib2模块方法,及BeautifulSoup模块. 源码如下: #coding:utf-8 import urllib2 from BeautifulSoup import BeautifulSoup ''' www.iplaypy.com

Python从零开始写爬虫-3 获取需要抓取的URLs

Python从零开始写爬虫-3 获取需要抓取的URLs ??在一节中,我们学习了如果通过正则表达式来获取HTML里面指点便签的内容, 那么我今天就来看看实际的效果.在抓取小说之前, 我们需要知道小说有哪些章节,以及这些章节的顺序. ??刚开始我是通过获取一个章节, 然后从这个章节获取下个章节的链接, 然后发现这个方法问题很大. 该方法只能单线程操作, 对于抓取小说来非常的满, 几乎没有爬虫是单线程, 单线程的效率是无法被接受的. 鲁棒性差, 只要有一个章节没有正确的抓取下来, 那么整个程序就无法

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

Python 爬虫工程师必学 App数据抓取实战

第1章 课程介绍介绍课程目标.通过课程能学习到的内容.学会这些技能能做什么,对公司业务有哪些帮助,对个人有哪些帮助.介绍目前app数据抓取有哪些困难,面临的挑战,本实战课程会利用哪些工具来解决这些问题,以及本实战课程的特点 ... 1-1 python爬虫工程师必备技能--App数据抓取实战课程导学第2章 windows下搭建开发环境介绍项目开发需要安装的开发软件,讲解了安卓模拟器对比以及夜神安卓模拟器安装.介绍.简单使用和Genymotion安卓模拟器简单分析 介绍App应用抓包工具对比以及f

Python爬虫工程师必学——App数据抓取实战

Python爬虫工程师必学 App数据抓取实战 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.主要讲解如何用python实现App数据抓取 数据去重又称重复数据删除,是指在一个数字文件集合中,找出重复的数据并将其删除,只保存唯一的数据单元.数据去重可以有效避免资源的浪费,所以数据去重至关重要 数据去重 数据去重可以从两个节点入手:一个是URL去重.即直接筛选掉重复的URL:另一个是数据库去重.即利用数据库的一些特性筛选重复的数据. def process_spider_

scrapy抓取的页面中文会变成unicode字符串

不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html 现象:从scrapy抓取的页面中文会变成unicode字符串,如下图 2017-03-28 23:00:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.lagou.com/jobs/2617468.html> {'describe': [u'<div>\n <p>\u5c97\u

用C#抓取AJAX页面的内容

现在的网页有相当一部分是采用了AJAX技术,不管是采用C#中的WebClient还是HttpRequest都得不到正确的结果,因为这些脚本是在服务器发送完毕后才执行的! 但我们用IE浏览页面时是正常的,所以解决方法只有1个就是采用WebBrowser控件 但是使用Webbrowser你会发现,在DownloadComplete事件中,你根本无法知道页面何时才算是真正的加载完毕! 当然个别有Frame的网页可能会触发多次Complete,即使你采用计数器的办法,即在Navigated事件中++,而