网络爬虫中进行数据抓取

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

 

以上是关于网络爬虫中进行数据抓取的主要内容,如果未能解决你的问题,请参考以下文章

java爬虫抓取指定数据

python,网络爬虫完整示例代码--抓取中国最好大学排名网站信息,并进行输出显示

如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

利用Python网络爬虫抓取微信好友的签名及其可视化展示

利用Python网络爬虫抓取微信好友的签名及其可视化展示