网络爬虫中进行数据抓取
Posted whatyouknow123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络爬虫中进行数据抓取相关的知识,希望对你有一定的参考价值。
以下内容是《用python写网络爬虫》的读书笔记
一、安装firebug lite
firebug lite是一个用于在网站中查看调试html,css和javascript的有效工具。它现在可以安装在chrome和firefox浏览器上。chrome浏览器的安装教程。firefox浏览器的安装教程。
二、三种页面抓取方式
(1)正则表达式
正则表达式是我们进行数据获取的最基本的方式,不了解正则表达式的,可以参看正则表达式的基本用法。
我们可以先下载html数据,然后用正则表达式对html中的数据进行匹配。以下是一个简单的用法样例:
url = "http://www.cnblogs.com/xudong-bupt/p/3586889.html" html = download(url) list = re.findall(\'<div class="BlogStats">(.*?)</div>\', html) print list[0]
这个样例的作用是能够打印出html文件中第一个<div class = "BlogStats"></div>之间的内容。
用正则表达式来获取数据,优点是形式简单,缺点是很难获得健壮的正则表达式,当页面发生细微变化时,正则表达式可能就不起作用了。
(2)Beautiful Soup
在开始之前内,首先我们需要在python中安装beautifulsoup模块,我使用 pip install beautifulsoup4,来进行模块的安装。它的相关方法可查阅其官方文档
现在我们来执行一个小样例:
from bs4 import BeautifulSoup from Chapter1.Background_Research import * def tes_example(): \'\'\' use a broken_html to test the beautiful soup :return: \'\'\' broken_html = "<url class=country><li>Area <li>Population</url>" # use beautiful soup to parse the broken_html soup = BeautifulSoup(broken_html, \'html.parser\') fixed_html = soup.prettify() print fixed_html def find_text(url, id_name): \'\'\' find the lable text which id is equal to id_name :param url: the url of the html :param id_name: locate the special id :return: the text between the special label \'\'\' html = download(url) soup = BeautifulSoup(html, "html.parser") tr = soup.find(attrs={\'id\': id_name}) text = tr.text return text text = find_text("http://www.cnpythoner.com/post/300.html", \'title\') print text
(3)Lxml
Lxml 是基于libxml2这个xml解析库的python封装。该模块使用c语言编写,解析速度比beautiful soup更快,不过安装教程也更为复杂,附上最新的安装说明。
Lxml和beautiful soup相比有一个明显的优点就是它能够使用css选择器进行数据抽取。它已经能够实现大部分的css3属性,但是还有一部分是不支持的。具体可参看它的说明文档。
下面是Lxml使用的一个小样例:
import lxml.html
from Chapter1.Background_Research import download
def test_lxml():
\'\'\'
use a broken_html to test the beautiful soup
:return:
\'\'\'
broken_html = "<url class="country"><li>Area <li>Population</url>"
# use beautiful soup to parse the broken_html
parse_html = lxml.html.fromstring(broken_html)
fixed_html = lxml.html.tostring(parse_html, pretty_print=True)
print fixed_html
test_lxml()
def find_text(url, id_name):
\'\'\'
it can get all text of label a under the div which id is id_name
:param url: given a url
:param id_name: define the special id name
:return: all text
\'\'\'
html = download(url)
tree_html = lxml.html.fromstring(html)
td = tree_html.cssselect(\'div#\'+id_name+\'> a\')
values = []
for d in td:
values.append(d.text_content())
return values
values = find_text("http://www.cnpythoner.com/post/300.html", \'bdshare\')
for value in values:
print value
以上是关于网络爬虫中进行数据抓取的主要内容,如果未能解决你的问题,请参考以下文章
python,网络爬虫完整示例代码--抓取中国最好大学排名网站信息,并进行输出显示
如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例