爬虫入门|简单爬取古诗文网站

一、环境配置

需要requests、lxml第三方库

二、代码

import requests
from lxml import etree

url ='https://so.gushiwen.org/shiwen/'
r = requests.get(url)
selector = etree.HTML(r.text)

for eacharticle in selector.xpath('//div[@class="left"]/div[@class="sons"]'):
   work = eacharticle.xpath('div[@class="cont"]/p/a/b/text()')
   age = eacharticle.xpath('div[@class="cont"]/p[@class="source"]/a/text()')[0]
   author = eacharticle.xpath('div[@class="cont"]/p[@class="source"]/a/text()')[1]
   content = eacharticle.xpath('string(div[@class="cont"]/div[@class="contson"])')
   tag = eacharticle.xpath('div[@class="tag"]/a/text()')
   print(work,age,author,content,tag)

我们在pycharm里运行这段代码,输出结果截取片段如下:


输出结果

这里的work,tag为列表,age,author,content为字符串形式
注意到在爬取正文content的时候,我们并没有直接用/text(),而是用了string()函数,改用下面这行代码看看输出会怎么样

content = eacharticle.xpath('div[@class="cont"]/div[@class="contson"]/text()')

输出结果:


输出结果

这时,爬虫爬取的结果不尽人意,让我们回到网页上一探究竟:


检查网页元素

可以看出,在未能爬到的水调歌头div class="contson"标签下,正文被<p>标签分割成了几部分,/text()是无法获取到子标签下的内容的。故在这一部分改用了string()函数,可以获取该节点下所有子节点的内容,并以字符串的形式输出。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。