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随手笔记之标准类型内建函数
Dec 02 Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
基于python if 判断选择结构的实例详解
May 06 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
python实现爬取百度图片的方法示例
Jul 06 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
Django更新models数据库结构步骤
Apr 01 Python
python安装cx_Oracle和wxPython的方法
Sep 14 Python
Python list去重且保持原顺序不变的方法
Apr 03 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 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添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
php获取url参数方法总结
2014/11/13 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
JS实现页面内跳转的简单代码
2017/09/03 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Python中的集合介绍
2019/01/28 Python
django url到views参数传递的实例
2019/07/19 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Python csv模块使用方法代码实例
2019/08/29 Python
简单介绍django提供的加密算法
2019/12/18 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
医学生毕业自我鉴定
2014/03/26 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
平安建设汇报材料
2014/12/29 职场文书
送达通知书
2015/04/25 职场文书
观看《信仰》心得体会
2016/01/15 职场文书