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 24 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
详解python持久化文件读写
Apr 06 Python
Python玩转PDF的各种骚操作
May 06 Python
Django中Middleware中的函数详解
Jul 18 Python
python中对_init_的理解及实例解析
Oct 11 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
python 实现超级玛丽游戏
Nov 25 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 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站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
微信支付开发维权通知实例
2016/07/12 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
python中列表和元组的区别
2017/12/18 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python实现关键词提取的示例讲解
2018/04/28 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python3 线性回归验证方法
2019/07/09 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python numpy实现rolling滚动案例
2020/06/08 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
门卫岗位职责
2013/11/15 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
乐观大学生的自我评价
2014/01/10 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
单位工作证明范文
2014/09/14 职场文书
社团招新宣传语
2015/07/13 职场文书
导游词之广州陈家祠
2019/10/21 职场文书