上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地

爬取博客园博客

爬取思路:

1、首先找到需要爬取的博客园地址

2、解析博客园地址

# coding:utf-8
import requests
from lxml import etree
# 博客园地址
url = 'http://www.cnblogs.com/qican/'
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
}
html =requests.get(url,headers=headers).text
# 解析html内容
xml = etree.HTML(html)

3、通过博客名称抓取博客标题和详情链接。

经过分析数据我们需要a标签下的文字和href内容

# 标题
title_list = xml.xpath('//div[@class="postTitle"]/a/text()')
# 链接url
url_list = xml.xpath('//div[@class="postTitle"]/a/@href')

4、再次请求博客详情链接获取博客内容

通过for循环获取到标题,链接内容,然后再次请求博客链接获取博客内容

for i,j in zip(title_list,url_list):
# 再次请求博客链接
r2 = requests.get(j,headers=headers).text
# 解析内容
xml_content = etree.HTML(r2)
# 获取博客内容
content = xml_content.xpath('//div[@class="postBody"]//text()')

5、获取的博客内容写入到txt文件中。

通过with写入txt文件中,这里注意内容的编码格式

for x in content:
print(x.strip())
with open(i+'.txt','a+',encoding='utf-8')as f:
f.write(x)

写到这里发现我们都已经把博客内容写入了txt文件中,当然了这只是其中第一页的内容,我们通过观察url链接,发现分页是有page控制的,我们来模拟page数据获取全部博客内容

代码如下:

通过for循环获取模拟分页

# coding:utf-8
import requests
from lxml import etree
# 通过循环模拟url分页
for page in range(1,4):
# 博客园地址
url = 'https://www.cnblogs.com/qican/default.html?page=%s'%page
print(url)
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
}
html =requests.get(url,headers=headers).text
# 解析html内容
xml = etree.HTML(html)
# 标题
title_list = xml.xpath('//div[@class="postTitle"]/a/text()')
# 链接url
url_list = xml.xpath('//div[@class="postTitle"]/a/@href')
for i,j in zip(title_list,url_list):
print(i)
# 再次请求博客链接
r2 = requests.get(j,headers=headers).text
# 解析内容
xml_content = etree.HTML(r2)
# 获取博客内容
content = xml_content.xpath('//div[@class="postBody"]//text()')
# 写入内容
for x in content:
print(x.strip())
with open(i+'.txt','a+',encoding='utf-8')as f:
f.write(x)

简单的通过案例又一次加深了lxml的用法,当然方法很多种,喜欢哪种用哪种。~~~

爬虫---lxml爬取博客文章的更多相关文章

  1. python 小爬虫爬取博客文章初体验

    最近学习 python 走火入魔,趁着热情继续初级体验一下下爬虫,以前用 java也写过,这里还是最初级的爬取html,都没有用html解析器,正则等...而且一直在循环效率肯定### 很低下 imp ...

  2. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  3. Python爬虫简单实现CSDN博客文章标题列表

    Python爬虫简单实现CSDN博客文章标题列表 操作步骤: 分析接口,怎么获取数据? 模拟接口,尝试提取数据 封装接口函数,实现函数调用. 1.分析接口 打开Chrome浏览器,开启开发者工具(F1 ...

  4. [js高手之路]Node.js实现简易的爬虫-抓取博客文章列表信息

    抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 ...

  5. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  6. Java使用Jsoup之爬取博客数据应用实例

    导入Maven依赖 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <g ...

  7. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  8. 使用JAVA爬取博客里面的所有文章

    主要思路: 1.找到列表页. 2.找到文章页. 3.用一个队列来保存将要爬取的网页,爬取队头的url,如果队列非空,则一直爬取. 4.如果是列表页,则抽取里面所有的文章url进队:如果是文章页,则直接 ...

  9. python3 爬虫之爬取安居客二手房资讯(第一版)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...

随机推荐

  1. Linux下使用 github+hexo 搭建个人博客05-next主题接入评论系统

    静态站点拥有一定的局限性,因此我们需要借助于第三方服务来扩展我们站点的功能. 而评论系统是最常用于和网站用户交流的,因此本章讲解在 next 主题,如何接入评论系统. 参考网站:Next 使用文档,第 ...

  2. [20191031]完善vim的bccalc插件7.txt

    [20191031]完善vim的bccalc插件7.txt --//增加/ 2^16 %2^16功能,输入\tx,例子:1398145029 = /2^16  %2^16 (type and mode ...

  3. 示例:Oracle表锁、行锁模拟和处理

    for update模拟锁表 --session 1 SQL> select * from tt for update; --session 2 SQL> update tt set id ...

  4. Linux-3.14.12内存管理笔记【构建内存管理框架(3)】

    此处接前文,分析free_area_init_nodes()函数最后部分,分析其末尾的循环: for_each_online_node(nid) { pg_data_t *pgdat = NODE_D ...

  5. 如何在mysql数据库生成百万条数据来测试页面加载速度

    1.首先复制一条sql 在复制前,需要确定该记录是否有主键 若无,则代码非常简单, "; 复制的表名↑                                   粘贴的表名↑    ...

  6. RabbitMQ学习笔记(三、生产者与消费者)

    目录: 细说交换器 细说队列 发送消息 消费消息 确认与拒绝 细说交换器: 1.方法: public AMQP.Exchange.DeclareOk exchangeDeclare(String ex ...

  7. Cisco pppoe上网设置

    1.配置虚拟端口: interface Dialer1 ip address negotiated ip nat outside ip virtual-reassembly in encapsulat ...

  8. WPF DataGrid 绑定数据及时更新的处理

    原文:WPF DataGrid 绑定数据及时更新的处理 默认情况下datagrid 绑定数据源后,在界面编辑某一列后,数据不会及时更新到内存对象中.如在同一行上有一个命令对来获取 当前选中行(内存对象 ...

  9. 3. 语法"陷阱"

    1. C运算符优先级 运算符(优先级从高到低) 结合律 ++(后置).--(后置).()(函数调用).[].{}.(复合字面量).. .-> 从左往右 ++(前置).--(前置).-.+.~.! ...

  10. Linux系统管理图文详解超详细精心整理

    前言:带你遨游于linux系统管理知识的海洋,沐浴春日里的阳光,循序渐进,看完之后收获满满. 本次讲解基于linux(centos6.5)虚拟机做的测试,centos7估计以后有时间再更新啊. lin ...