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写的创建文件夹自定义函数mkdir()
Aug 25 Python
python下MySQLdb用法实例分析
Jun 08 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
python随机取list中的元素方法
Apr 08 Python
django输出html内容的实例
May 27 Python
浅析python中numpy包中的argsort函数的使用
Aug 30 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
python3.6+selenium实现操作Frame中的页面元素
Jul 16 Python
python实现LRU热点缓存及原理
Oct 29 Python
python怎么调用自己的函数
Jul 01 Python
Python-openCV开运算实例
Jul 05 Python
如何利用python和DOS获取wifi密码
Mar 31 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
日语求职信范文
2013/12/17 职场文书
《长相思》听课反思
2014/04/10 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
实习介绍信范文
2015/05/05 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android