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 Web框架Pylons中使用MongoDB的例子
Dec 03 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
Jul 26 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
python 爬取华为应用市场评论
May 29 Python
Python提取PDF指定内容并生成新文件
Jun 09 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
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
php上传大文件设置方法
2016/04/14 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
python实现将文本转换成语音的方法
2015/05/28 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
公证书格式
2015/01/23 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
小学音乐课教学反思
2016/02/18 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
javascript canvas实现雨滴效果
2021/06/09 Javascript
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
使用Python获取字典键对应值的方法
2022/04/26 Python