Python爬虫爬取新闻资讯案例详解


Posted in Python onJuly 14, 2020

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

一个简单的Python资讯采集案例,列表页到详情页,到数据保存,保存为txt文档,网站网页结构算是比较规整,简单清晰明了,资讯新闻内容的采集和保存!

Python爬虫爬取新闻资讯案例详解

应用到的库

requests,time,re,UserAgent,etree

import requests,time,re
from fake_useragent import UserAgent
from lxml import etree

列表页面

Python爬虫爬取新闻资讯案例详解

列表页,链接xpath解析

href_list=req.xpath('//ul[@class="news-list"]/li/a/@href')

详情页

Python爬虫爬取新闻资讯案例详解

Python爬虫爬取新闻资讯案例详解

内容xpath解析

h2=req.xpath('//div[@class="title-box"]/h2/text()')[0]
author=req.xpath('//div[@class="title-box"]/span[@class="news-from"]/text()')[0]
details=req.xpath('//div[@class="content-l detail"]/p/text()')

内容格式化处理

detail='\n'.join(details)

标题格式化处理,替换非法字符

pattern = r"[\/\\\:\*\?\"\<\>\|]"
new_title = re.sub(pattern, "_", title) # 替换为下划线

保存数据,保存为txt文本

def save(self,h2, author, detail):
with open(f'{h2}.txt','w',encoding='utf-8') as f:
f.write('%s%s%s%s%s'%(h2,'\n',detail,'\n',author))

print(f"保存{h2}.txt文本成功!")

遍历数据采集,yield处理

def get_tasks(self):
data_list = self.parse_home_list(self.url)
for item in data_list:
yield item

程序运行效果

Python爬虫爬取新闻资讯案例详解

程序采集效果

Python爬虫爬取新闻资讯案例详解

附源码参考:

# -*- coding: UTF-8 -*-

import requests,time,re
from fake_useragent import UserAgent
from lxml import etree

class RandomHeaders(object):
  ua=UserAgent()
  @property
  def random_headers(self):
    return {
      'User-Agent': self.ua.random,
    }

class Spider(RandomHeaders):
  def __init__(self,url):
    self.url=url


  def parse_home_list(self,url):
    response=requests.get(url,headers=self.random_headers).content.decode('utf-8')
    req=etree.HTML(response)
    href_list=req.xpath('//ul[@class="news-list"]/li/a/@href')
    print(href_list)
    for href in href_list:
      item = self.parse_detail(f'https://yz.chsi.com.cn{href}')
      yield item


  def parse_detail(self,url):
    print(f">>正在爬取{url}")
    try:
      response = requests.get(url, headers=self.random_headers).content.decode('utf-8')
      time.sleep(2)
    except Exception as e:
      print(e.args)
      self.parse_detail(url)
    else:
      req = etree.HTML(response)
      try:
        h2=req.xpath('//div[@class="title-box"]/h2/text()')[0]
        h2=self.validate_title(h2)
        author=req.xpath('//div[@class="title-box"]/span[@class="news-from"]/text()')[0]
        details=req.xpath('//div[@class="content-l detail"]/p/text()')
        detail='\n'.join(details)
        print(h2, author, detail)
        self.save(h2, author, detail)
        return h2, author, detail
      except IndexError:
        print(">>>采集出错需延时,5s后重试..")
        time.sleep(5)
        self.parse_detail(url)


  @staticmethod
  def validate_title(title):
    pattern = r"[\/\\\:\*\?\"\<\>\|]"
    new_title = re.sub(pattern, "_", title) # 替换为下划线
    return new_title



  def save(self,h2, author, detail):
    with open(f'{h2}.txt','w',encoding='utf-8') as f:
      f.write('%s%s%s%s%s'%(h2,'\n',detail,'\n',author))

    print(f"保存{h2}.txt文本成功!")
  def get_tasks(self):
    data_list = self.parse_home_list(self.url)
    for item in data_list:
      yield item
if __name__=="__main__":
  url="https://yz.chsi.com.cn/kyzx/jyxd/"
  spider=Spider(url)
  for data in spider.get_tasks():
    print(data)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python文件夹与文件的操作实现代码
Jul 13 Python
python中的编码知识整理汇总
Jan 26 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
python中的sys模块和os模块
Mar 20 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 #Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 #Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 #Python
python如何写try语句
Jul 14 #Python
Python操作MySQL数据库的示例代码
Jul 13 #Python
Python基于正则表达式实现计算器功能
Jul 13 #Python
python输出结果刷新及进度条的实现操作
Jul 13 #Python
You might like
php中变量及部分适用方法
2008/03/27 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
React如何避免重渲染
2018/04/10 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
车间组长岗位职责
2013/12/20 职场文书
毕业生自荐书模版
2014/01/04 职场文书
基层党员对照检查材料
2014/08/25 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
创业计划书之餐饮
2019/09/02 职场文书
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers