爬虫---lxml爬取博客文章
上一篇大概写了下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爬取博客文章的更多相关文章
- python 小爬虫爬取博客文章初体验
最近学习 python 走火入魔,趁着热情继续初级体验一下下爬虫,以前用 java也写过,这里还是最初级的爬取html,都没有用html解析器,正则等...而且一直在循环效率肯定### 很低下 imp ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- Python爬虫简单实现CSDN博客文章标题列表
Python爬虫简单实现CSDN博客文章标题列表 操作步骤: 分析接口,怎么获取数据? 模拟接口,尝试提取数据 封装接口函数,实现函数调用. 1.分析接口 打开Chrome浏览器,开启开发者工具(F1 ...
- [js高手之路]Node.js实现简易的爬虫-抓取博客文章列表信息
抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 ...
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...
- Java使用Jsoup之爬取博客数据应用实例
导入Maven依赖 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <g ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- 使用JAVA爬取博客里面的所有文章
主要思路: 1.找到列表页. 2.找到文章页. 3.用一个队列来保存将要爬取的网页,爬取队头的url,如果队列非空,则一直爬取. 4.如果是列表页,则抽取里面所有的文章url进队:如果是文章页,则直接 ...
- python3 爬虫之爬取安居客二手房资讯(第一版)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...
随机推荐
- The PostgreSQL installation in windows
Summary: in this tutorial, we will show you how to install PostgreSQL on your local system for learn ...
- SQL,case ziduan when ziduan_value then 'result'
case a.sex when 0 then '女' when 1 then '男' else '其他' end as sex 当a表的性别字段的value为0时将查询的value转换成 '女',当字 ...
- Linux:VIM编辑器的使用
打开vim编辑器 命令格式: vim 文件路径 vim编辑器的工作模式 进入编辑器后 默认为命令模式 进入输入模式 a 在光标后插入 o 换行插入 i 在光标前插入 返回命令模式 esc 键 进入末行 ...
- 求n的阶乘!
编写一个computer类,类中含有一个求n的阶乘的方法,将该类打包, 在另一个包中引入包,在主类中定义computer类的对象,调用求n的阶乘的方法,并输出结果 结果
- a迭代尾声处理
这是小组开发a阶段迭代的成员工具teambition,现阶段a迭代需要最后的整合,同时我们也在开始了b迭代过程,并不断完善在开发工程中我们文档方面的记录
- Java多态的总结
多态 多态是一个对象具有不同表现形态或形式的能力,根据不同的实例执行不同的操作,例如打印机具有打印功能,打印机又有彩色打印机和黑白打印机,彩色打印机的实例打印出来的是彩色,黑白打印机打印出来的是黑色, ...
- Codechef October Challenge 2019 Division 1
Preface 这次CC难度较上两场升高了许多,后面两题都只能借着曲明姐姐和jz姐姐的仙气来做 值得一提的是原来的F大概需要大力分类讨论,结果我写了一大半题目就因为原题被ban了233 最后勉强涨了近 ...
- 趣谈Linux操作系统学习笔记:第二十四讲
一.小内存的分配基础 1.kmem_cache_alloc_node的作用 通过这段代码可以看出,它调用了kmem_cache_alloc_node函数,在task_struct的缓存区域task_s ...
- 手动创建分区以及软硬raid的问题
本文章旨在介绍安装centos7时手动分区问题,及其所对应的软硬raid问题.在新建centos7系统时,需要手动分区时,提供给我们三个选项: 在上图中,默认选项为“Standard Partitio ...
- spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...