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中遍历文件的3个方法
Sep 02 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
在Python中操作字符串之startswith()方法的使用
May 20 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
Python格式化输出%s和%d
May 07 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
一劳永逸彻底解决pip install慢的办法
May 24 Python
opencv读取视频并保存图像的方法
Jun 04 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
Web服务器框架 Tornado简介
2014/07/16 Python
Python常用列表数据结构小结
2014/08/06 Python
Python利用ansible分发处理任务
2015/08/04 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
绿色出行口号
2014/06/18 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
MySQL基础(一)
2021/04/05 MySQL
基于python实现银行管理系统
2021/04/20 Python
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL