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 把数据 json格式输出的实例代码
Oct 31 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
Python计时相关操作详解【time,datetime】
May 26 Python
spyder常用快捷键(分享)
Jul 19 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
详解Django中间件执行顺序
Jul 16 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
解决python 读取 log日志的编码问题
Dec 24 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
python中关于数据类型的学习笔记
Jul 19 Python
python实现PolynomialFeatures多项式的方法
Jan 06 Python
如何Python使用re模块实现okenizer
Apr 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
桌面中心(三)修改数据库
2006/10/09 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
PHP 8新特性简介
2020/08/18 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python编程入门的一些基本知识
2015/05/13 Python
使用python绘制常用的图表
2016/08/27 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python判断正负数方式
2020/06/03 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
法学专业应届生求职信
2013/10/16 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
报效祖国演讲稿
2014/09/15 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2014全年工作总结
2014/11/27 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
golang实现浏览器导出excel文件功能
2022/03/25 Golang