基础内容主要参考《从零开始学python网络爬虫》。
今天主要练习lxml库和xpath语法的使用,本文主要记录个人操作中的问题。
一、lxml库
lxml库为XML解析库,但也很好的支持了HTML文档的解析功能。lxml库很实用的功能就是自动修正HTML代码。
二、xpath语法
xpath是一门在XML文档中查找信息的语言,对HTML文档也有很好的支持。
1、节点关系
节点名 | 性质 |
---|---|
父节点 | 每个元素及属性都有一个节点 |
子节点 | 元素节点可能有0个、一个或多个子节点 |
同胞节点 | 同胞节点拥有相同的父节点 |
先辈节点 | 先辈节点指某节点的父、父的父节点等 |
后代节点 | 后代节点指某个节点的子节点,子节点的子节点等 |
2、节点选择
节点选择表达式 | 描述 | 实例 |
---|---|---|
nodename | 选取此节点的所有子节点 | user_database:选取元素user_database的所有子节点 |
/ | 从根节点选取 | /user_database:选取根元素user_database。(注释:假如路径起始于正斜杠(/),则此路径始终代表到某元素的绝对路径)。user_database/user:选取属于user_database的子元素的所有user元素。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 | //user:选取所有user子元素,而不管它们在文档中的位置。user_database//user:选取属于user_database元素的后代的所有user元素,而不管它们位于user_database之下的什么位置。 |
. | 选取当前节点 | ----- |
… | 选取当前节点的父节点 | ----- |
@ | 选取属性 | //@attribute:选取名为attribute的所有属性 |
谓语路径表达式 | 结果 |
---|---|
/user_database/user[1] | 选取属于user_database子元素的第一个user元素 |
//li[@attribute] | 选取所有拥有名为attribute属性的li元素 |
//li[@attribute=‘red’] | 选取所有li元素,且这些元素拥有值为red的attribute属性 |
三、爬取豆瓣图书top250
# coding=utf-8
import csv
from lxml import etree
import requests
fp=