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获取指定网页上所有超链接的方法
Apr 04 Python
Python脚本实现格式化css文件
Apr 08 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
简单了解Django应用app及分布式路由
Jul 24 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python中requests做接口测试的方法
May 30 Python
Python中Selenium对Cookie的操作方法
Jul 09 Python
Python装饰器详细介绍
Mar 25 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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
phpmyadmin的#1251问题
2006/11/25 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python2.7实现爬虫网页数据
2018/05/25 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
虚拟机下载python是否需要联网
2020/07/27 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
民族团结演讲稿范文
2014/08/27 职场文书
2014年化验员工作总结
2014/11/18 职场文书
公司人力资源管理制度
2015/08/05 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB