步骤:
1、获取首页response内容;
2、解析网页内容,获取所需信息;
3、获取下一页url;
4、获取下一页response信息;
5、解析网页内容,获取所需信息(使用xpath解析);
6、保存到文件。
一步一步解决
什么是xpath
xml数据都是双标签
html既有单标签又有双标签
xpath可以快速获取每个标签的属性
parsel模块是一个xml html解析器,返回对象由xpath的方法,然后返回结果的列表
2、xpath的语法
/从根节点进行提取
// 表示跨节点获取标签.例如
. 表示选取当前节点,对节点数据的二次提取 例如
.. 表示选取当前节点的父节点 例如
@ 选取属性。(每一个标签里面都有属性值)
text() 选取标签包裹文本。
通配符
* 匹配任何元素节点
@*匹配任何属性的节点
node()匹配任何类型的节点
/div/*选取div元素中的所有子元素
//*选取文档中的所有元素
//title[@*]选取所有带属性的title元素
import parsel
text = '''
<table width="100%">
<tr class="item">
<td width="100" valign="top">
<a class="nbg" href="https://book.douban.com/subject/1007305/"
onclick="moreurl(this,{i:'0'})"
>
<img src="https://img1.doubanio.com/view/subject/s/public/s1070959.jpg" width="90" />
</a>
</td>
<td valign="top">
<div class="pl2">
<a href="https://book.douban.com/subject/1007305/" onclick="moreurl(this,{i:'0'})" title="红楼梦"
>
红楼梦
</a>
<img src="/pics/read.gif" alt="可试读" title="可试读"/>
</div>
<p class="pl">[清] 曹雪芹 著 / 人民文学出版社 / 1996-12 / 59.70元</p>
<div class="star clearfix">
<span class="allstar50"></span>
<span class="rating_nums">9.6</span>
<span class="pl">(
372235人评价
)</span>
</div>
<p class="quote" style="margin: 10px 0; color: #666">
<span class="inq">都云作者痴,谁解其中味?</span>
</p>
</td>
</tr>
</table>
'''
data = parsel.Selector(text)
result = data.xpath('/html/body/table/tr/td/a').extract()#加入标准数据格式,从根节点
result1 = data.xpath('//a').extract()#跨节点
result2 = data.xpath('//a')#选取一个节点
result3 = result2.xpath('./img').extract()#对当前节点进行二次提取
result4 = data.xpath('//a')#选取一个节点
result5 = result4.xpath('../@class').extract()#获取父节点的属性
result6 = data.xpath('//td[1]').extract()#获取一个同级节点
result7 = data.xpath(('//td'))[0].extract()#同上,不同方法
result8 = data.xpath('//td[@width="100"]').extract()#根据属性值进行定位
result9 = data.xpath('//a[@href="https://book.douban.com/subject/1007305/"]/text()').extract()#根据属性值进行定位并获取文本内容
result10 = data.xpath('//a[1]/@class').extract()#根据属性值进行定位并获取文本内容
#下面是模糊查询的内容
result11 = data.xpath('//td[contains(@wi,"1")]').extract()
#xpath中节点选择的工具
print(result11)