获取欧洲时报中国板块前新闻数据(多线程版)

news2024/11/26 19:44:34

这里写目录标题

  • 一.数据获取流程
  • 二.获取主页面数据并提取出文章url
  • 三.获取文章详情页的数据并提取
  • 整体代码展示

一.数据获取流程

我们首先通过抓包就能够找到我们所需数据的api
在这里插入图片描述
在这里插入图片描述

这里一共有五个参数其中只有第一个和第五个参数是变化的第一个参数就是第几页第五个是一个由时间戳生成的一组数字(可以不用)

在这里插入图片描述
通过它的返回值我们可以提取出文章的标题以及具体的url
在这里插入图片描述
这就是整个流程

二.获取主页面数据并提取出文章url

url='https://cms.offshoremedia.net/front/list/latest'
parm={
'pageNum': '1',
'pageSize': '15',
'siteId': '694841922577108992',
'channelId': '780811183157682176'
}
header={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',
}
falidurl=[]
for i in range(1,50):
    parm['pageNum'] = str(i)

    res=requests.get(url,headers=er,params=parm).json()
    for i in res["info"]["list"]:
        newurl=i["contentStaticPage"]

通过对https://cms.offshoremedia.net/front/list/latest发送get请求通过改变pageNum的值来获取不同页的文章具体url

三.获取文章详情页的数据并提取

import requests
from lxml import etree
import time
def xxl(url):
    head={
    'Accept':
    'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Encoding':
    'gzip, deflate, br, zstd'
    }
    #url='https://www.oushinet.com/static/content/china/chinanews/2024-07-10/1260625203458775997.html'
    res=requests.get(url,headers=head)
    res.encoding='utf-8'
    etrees=etree.HTML(res.text)
    id=url.split('/')[-1].split('.')[0]
    clas=url.split('/')[5]
    title=etrees.xpath(f'//*[@id="{id}"]/text()')[0]
    timee=etrees.xpath('/html/body/div[1]/div[2]/div/div[1]/div[1]/div[1]/div[3]/span[1]/i/text()')[0]
    now =int(timee)
    timeArray = time.localtime(now/1000)
    otherStyleTime = time.strftime("%Y-%m-%d", timeArray)
    Released="发布时间:"+otherStyleTime
    imgurl=etrees.xpath('/html/body/div[1]/div[2]/div/div[1]/div[1]/div[1]//img/@src')
    if imgurl==[]:
        imgurl="无图片"
    Imageannotations=etrees.xpath('/html/body/div[1]/div[2]/div/div[1]/div[1]/div[1]/div[4]/div/p/b/text()')#b标签含有图片来源
    if Imageannotations==[]:
        Imageannotations="无图片注释"
    text=etrees.xpath('/html/body/div[1]/div[2]/div/div[1]/div[1]/div[1]/div[4]/div/p[@style="text-indent:2em;"]/text()')
    #print(imgurl,Imageannotations)
    summary=text[0]
    del text[0]
    body=""
    for i in text:
        body=body+'\n'+i
    
    return [id,clas,title,otherStyleTime,Released,str(imgurl),str(Imageannotations),summary,body,url]

这里我们使用的是xpath对数据进行提取
此示例代码只适用于该网站中大部分网页信息提取有极个别网页的排版较为特殊这里就不在提取了

整体代码展示

由于单线程速度较慢所以我们使用了线程池
并且使用了PooledDB模块来在多线程是操作数据库

为什么使用PooledDB模块: https://blog.csdn.net/zer_o_o/article/details/86742430

from multiprocessing.dummy import Pool
import requests
from cs import xxl
import pymysql
from dbutils.pooled_db import PooledDB

# 数据库连接池
pool = PooledDB(
    creator=pymysql,
    maxconnections=32,
    mincached=10,
    blocking=True,
    ping=0,
    host='127.0.0.1',
    user='root',
    password='root',
    port=3306,
    database='news',
)

def query(nae):
    parm['pageNum'] = str(nae)

    res = requests.get(url, headers=header, params=parm).json()
    for i in res["info"]["list"]:
        try:
            newurl = i["contentStaticPage"]
            list = xxl(newurl)
            with pool.connection() as conn:  # 使用with语句自动管理连接
                with conn.cursor() as cursor:  # 同样使用with语句自动管理游标
                    sql = """
                        INSERT INTO untitled (id, clas, title, otherStyleTime, Released, imgurl, Imageannotations, summary, body, url)
                        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                    """
                    cursor.execute(sql, list)
                    conn.commit()
        except Exception as e:
            print(f"Failed to process URL {i['contentStaticPage']}: {str(e)}")
            falidurl.append(i["contentStaticPage"])


falidurl = list()
url='https://cms.offshoremedia.net/front/list/latest'
parm={
'pageNum': '3',
'pageSize': '15',
'siteId': '694841922577108992',
'channelId': '780811183157682176'
}
header={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',
'Origin':
'https://www.oushinet.com',
'Referer':
'https://www.oushinet.com/',
'Content-Type':
'application/json;charset=UTF-8'

}

list=[]

for i in range(1, 1000):
    list.append(i)

pool = Pool(30)
pool.map(query, list)

# 不需要显式关闭连接,因为我们在with语句中已经处理了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文翻译 | Successive Prompting for Decomposing Complex Questions 分解复杂问题的连续提示

摘要 回答需要做出潜在决策的复杂问题是一项具有挑战性的任务,尤其是在监督有限的情况下。 最近的研究利用大型语言模型(LMs)的能力,在少量样本设置中通过展示如何在单次处理复杂问题的同时输出中间推理过程,来执行复杂…

【自学安全防御】二、防火墙NAT智能选路综合实验

任务要求: (衔接上一个实验所以从第七点开始,但与上一个实验关系不大) 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总…

Jdk8 Idea Maven Received fatal alert: protocol_version

问题描述 使用idea开发工具,maven加载项目依赖时,出现错误: Could not transfer artfact xxxxxxx from/to maven-dep-repos https://XXXXXXX: Received fatal alert: protocol_version初步思路 用关键字protocol_version 去检索&#xff0…

Schematics,一个牛逼的python库用于数据验证和转换的库

目录 什么是Schematics? 为什么使用Schematics? 安装Schematics 定义模式 验证数据 自定义验证 转换数据 结语 什么是Schematics? 在Python的世界中,Schematics是一个用于数据验证和转换的库。它通过定义数据结构的模式(…

30秒学会UML-功能类图

目录 1、类图本体 三部分 修饰符 2、类与类直接关系 泛化关系 实现关系 简单关联关系 依赖关系 组合关系 聚合关系 1、类图本体 三部分 第一层:类名第二层:成员变量(类的属性)第三层:函数方法(类…

PX4 运行 make px4_sitl_default gazebo 报错

报错原因:最开始我把依赖一直都是在base环境下安装的,没有conda deactivate,而pip install的东西应该装在系统环境,不能装在base环境下,sudo apt 是装在系统环境的 1.检查ros 用鱼香ros安装 wget http://fishros.…

SSL证书续费

讲解下域名证书如何续费(以阿里云为例) ‍ 提醒 一般云服务器厂商,都会提前和你一个月左右通知(邮件、短信等),例如: 尊敬的 xxx:您域名 www.peterjxl.com 使用的 SSL 证书 xxxxx…

Linux编程(通信协议---udp)

UDP(用户数据报协议)是一种无连接的网络协议,主要用于快速传输数据。以下是UDP协议的一些主要特点: 1. **无连接**:UDP是无连接的协议,这意味着在数据传输之前不需要建立连接。每个UDP数据包都是独立的&am…

数据库操作太复杂?Python Shelve模块让你轻松存储,一键搞定!

目录 1、基本操作入门 📚 1.1 安装Shelve模块 1.2 创建与打开Shelve文件 2、存储与读取数据 🔐 2.1 写入键值对 2.2 读取存储的数据 3、高级功能探索 🧭 3.1 使用Shelve迭代键和值 3.2 键的管理:添加、删除与更新 4、异…

minishell

今天完成了minishell的制作 项目需求: 1. 获取终端用户输入的命令,并输出相应的执行结果。 touch cp mv ls ls -a ls -l mkdir rmdir pwd cd ln ln -s exit ---------…

鸿蒙开发HarmonyOS NEXT (四) 熟悉ArkTs (下)

一、动画 1、属性动画 animation,可以通过配置动画时间duration等参数,实现移动时的平滑过度 写了个小鱼游动的小案例 Entry Component struct ActionPage {State fish: Resource $r(app.media.fish_right) //小鱼图片State fishX: number 200 //初始化小鱼横坐…

Day07-员工管理-上传下载

1.员工管理-导出excel 导出员工接口返回的是二进制axios配置responseType为blob接收二进制流文件为Blob格式按装file-saver包,实现下载Blob文件npm install add file-saver导出员工excel的接口 (src/api/employee.js) export function exportEmployee(){return req…

【区块链 + 智慧政务】涉税行政事业性收费“e 链通”项目 | FISCO BCOS应用案例

国内很多城市目前划转至税务部门征收的非税收入项目已达 17 项,其征管方式为行政主管部门核定后交由税务 部门征收。涉税行政事业性收费受限于传统的管理模式,缴费人、业务主管部门、税务部门、财政部门四方处于 相对孤立的状态,信息的传递靠…

【Diffusion学习】【生成式AI】Diffusion Model 原理剖析 (2/4) (optional)【公式推导】

文章目录 影像生成模型本质上的共同目标【拟合分布】Maximum Likelihood Estimation VAE 影像生成模型本质上的共同目标【拟合分布】 Maximum Likelihood Estimation VAE

图片服务器是什么?常见的图片服务器是哪几种?图片服务器的要求是什么?

什么是图片服务器 图片服务器,顾名思义就是专门用于处理图片的服务器,向外提供图片的上传,下载,图片展示等服务 为什么我们要使用专门的服务器处理图片 图片的数据量比文字展示高得多,图片的上传下载展示一系列操作…

Linux进程——进程优先级与僵尸进程孤儿进程

文章目录 僵尸进程变成僵尸状态的过程 孤儿进程进程优先级如何修改进程优先级为什么优先级有范围 僵尸进程 僵尸状态进程本质上就是死亡状态 在进程死亡之后,不会直接对进程进行释放,而是先会处理一些后事 进程在结束退出的时候,也会有一些…

介绍 Elasticsearch 中的 Learning to Tank - 学习排名

作者:来自 Elastic Aurlien Foucret 从 Elasticsearch 8.13 开始,我们提供了原生集成到 Elasticsearch 中的学习排名 (learning to rank - LTR) 实现。LTR 使用经过训练的机器学习 (ML) 模型为你的搜索引擎构建排名功能。通常,该模型用作第二…

CSA笔记1-基础知识和目录管理命令

[litonglocalhost ~]$ 是终端提示符,类似于Windows下的cmd的命令行 litong 当前系统登录的用户名 分隔符 localhost 当前机器名称,本地主机 ~ 当前用户的家目录 $ 表示当前用户为普通用户若为#则表示当前用户为超级管理员 su root 切换root权限…

我利用ChatGPT开发了一个网盘资源搜索神器APP

首先声明,本文不是买东西,仅分享个人利用ChatGPT开发项目的个人经验分享。 之前已经开发完Web端网盘资源搜索引擎,而在安卓平台使用浏览器访问总是有点不方便,于是考虑开发一个安卓端APP。 可是,自己并没有开发APP经验,那怎么办? 都说AI可以帮你搞定一切,那就用一用…

python项目读取oracle数据库方法(cx_Oracle库实现)

目录 创建一个python项目,并配置运行环境 查看oracle对应数据库版本(该标题下内容只是为了查看版本,不用在意) 从oracle官网下载对应版本的oracle客户端 解压下载的压缩包,并获取依赖 将依赖文件导入python项目运…