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 正则式 概述及常用字符
May 07 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
Python3计算三角形的面积代码
Dec 18 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python3 翻转二叉树的实现
Sep 30 Python
python支持多线程的爬虫实例
Dec 21 Python
python使用PIL剪切和拼接图片
Mar 23 Python
基于python实现对文件进行切分行
Apr 26 Python
python批量修改交换机密码的示例
Sep 22 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
Django框架之路由用法
Jun 10 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
收音机指标测试方法及仪器
2021/03/01 无线电
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
vue实现分页栏效果
2019/06/28 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python类属性的延迟计算
2016/10/22 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
利用python进行文件操作
2020/12/04 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
幼儿园美术教学反思
2014/01/31 职场文书
2014年团委工作总结
2014/11/13 职场文书
数学教师个人工作总结
2015/02/06 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书