Python学习:解析库的使用

一、lxml

目的

lxml通常用来提取网页中的文字、网址等,使用这个模块可以避免正则表达式的繁琐,可以快速定位快速找到所需要的内容。

引入

lxml 大部分功能都存在 lxml.etree中,一般都采用如下的模块导入方式:

from lxml import etree

lxml提供如下方式输入文本:

fromstring():解析字符串
HTML():解析HTML对象
XML():解析XML对象
parse():解析文件类型对象

示例:如何在网络上爬下网页内容后,用lxml来提取中间内容

import requests
from lxml import etree

url = 'www.baidu.com'
headers = {'use-agent':'xxxxx'}

response = requests.get(url,headers=headers)
# 通过etree.HTML()函数来构建一个可解析的对象
html = etree.HTML(response.text,,etree.HTMLParser())

# 返回的类型是
print(type(html))

# 这里就可以用xpath来解析网页获得指定的内容了
result = html.xpath('XPath语法')

etree._Element 是一个设计很精妙的结构,可以把他当做一个对象访问当前节点自身的文本节点,可以把他当做一个数组,元素就是他的子节点,可以把它当做一个字典,从而遍历他的属性

XPath语法

具体文本的获取主要有如下几个要注意的:

//:从任意节点出发开始定位

/:从根节点出发开始定位

@:选择节点的属性

text():选择节点的text文本

参考:https://blog.csdn.net/ChaseRaod/article/details/80615857

示例程序:

# 找到span节点下(其中属性class="short")的所有内容
result = html.xpath('//span[@class="short"]/text()')
# 获取class属性
result = html.xpath('//span/@class')

上述返回一个list,这样就可以访问里面的内容了。刚开始的“//”表示从任意节点出发,因此可以直接用自己需要找的那个节点作为最开始的节点选择(如果有重复则往上再找一下),这样定位方便简单。

当属性值不止一个时用contains方法:

contains xpath(“//div[contains(@id,’user’)]”) 选择id值包含user的div节点

 

二、Beautiful Soup使用

程序如下

import requests
from bs4 import BeautifulSoup

url = 'www.baidu.com'
headers = {'user-agent':'xxxxx'}

response = requests.get(url,headers = headers)
result = response.text
# 第一个参数是获得的网页内容,第二个是解析器类型,这里采用'lxml',一般为固定写法
# 得到的soup为bs4.BeautifulSoup对象
soup = BeautifulSoup(result,'lxml')
print(type(soup))
# 获取到对象后,就可以用".title"的形式获得title节点
# 用".string"获得title中的内容
print(soup.title.string)

至于如何获取节点和节点中的内容,未完待续,需要了去查。

 

你可能感兴趣的:(Python爬虫)