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在linux系统下获取系统内存使用情况的方法
May 11 Python
Python中关于使用模块的基础知识
May 24 Python
Python实现二分查找算法实例
May 26 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
python学习开发mock接口
Apr 28 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
使用 Python 遍历目录树的方法
Feb 29 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
python中有帮助函数吗
Jun 19 Python
关于tensorflow softmax函数用法解析
Jun 30 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
jQuery实现增删改查
2020/12/22 jQuery
PHP webshell检查工具 python实现代码
2009/09/15 Python
python局部赋值的规则
2013/03/07 Python
实例讲解python函数式编程
2014/06/09 Python
python快速查找算法应用实例
2014/09/26 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Django中提示消息messages的设置方式
2019/11/15 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
小学生环保标语
2014/06/13 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
护士工作心得体会
2016/01/25 职场文书
中学语文教学反思
2016/02/16 职场文书
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis