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

这里写目录标题

  • 一.数据获取流程
  • 二.获取主页面数据并提取出文章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="发布时间:"+otherStyleTimeimgurl=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'+ireturn [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.mzph.cn/pingmian/46833.shtml

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

相关文章

Qt 多窗体、复用窗口的使用

1.继承自QWidge的窗口的呈现,作为tabPage呈现,作为独立窗口呈现 2.继承自QMainWindow的窗口的呈现,作为abPage呈现,作为独立窗口呈现 1. 继承自QWidge的窗口的呈现 1.1 作为tabPage呈现 void MutiWindowExample::on_actWidgetI…

云计算数据中心(一)

目录 一、云数据中心的特征二、云数据中心网络部署(一)改进型树结构(二)递归层次结构(三)光交换网络(四)无线数据中心网络(五)软件定义网络 一、云数据中心的…

java 项目使用 acitiviti 流程引擎中的人员设置

学习目标: 目标 [ ]了解 java 项目使用 acitiviti 流程引擎中的人员设置 知识小记: - [x] 1、人员选择说明 - [x] 2、分配任务候选人 任务的候选人是指有权限对该任务进行操作的潜在用户群体,这个用户群体有权限处理(处理、完成)该任务…

最多可以派出多少支球队

最多可以派出多少支球队 解决“最多可以派出多少支球队”的问题需要准确理解题目要求,选择合适的算法(如贪心算法和双指针技术),并注意对原始数据进行适当的预处理(如排序)。在编程实现过程中,有…

MySQL索引重要知识点

1.什么是索引? 索引在项目中是比较常见的,它是帮助MySQL高效获取数据的数据结构,主要是用来提高数据检索的效率,降低数据库的I0成本,同时通过索引列对数据进行排序,降低数据排序的成本,也能降低…

java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】

1、问题描述 学习SparkSql中,将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中,相关代码见文章末尾。 运行代码时报出相关配置文件错误,如下。 根据该报错,发现网络上多数解决方都是基于java开发的解决方案&a…

uniapp字符串转base64,无需导入依赖(多端支持)

使用示例 import { Base64Encode, Base64Decode } from "@/utils/base64.js" base64.js const _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";export const Base64Encode = (text)

网络准入控制设备是什么?有哪些?网络准入设备臻品优选

小李:“小张,最近公司网络频繁遭遇外部攻击,我们得加强一下网络安全了。” 小张:“是啊,我听说实施网络准入控制是个不错的选择。但具体什么是网络准入控制设备?我们有哪些选择呢?” 小李微笑…

iredmail服务器安装步骤详解!如何做配置?

iredmail服务器安全性设置指南?怎么升级邮件服务器? iredmail是一个功能强大的邮件服务器解决方案,它集成了多个开源软件,使您能够快速部署和管理邮件服务。AokSend将逐步引导您完成安装过程,无需深入的编程知识即可轻…

AI智能名片在Web 3.0技术栈中的应用与前景研究

摘要:在Web 3.0的浪潮中,AI智能名片作为一种创新的数字工具,正逐步渗透到商业交流的各个层面。本文深入探讨了AI智能名片在Web 3.0技术栈中的具体应用,详细分析了其背后的技术支撑、应用场景、优势以及面临的挑战。通过案例分析、…

A Survey on Multimodal Large Language Models综述

论文题目:A Survey on Multimodal Large Language Models 论文地址:https://arxiv.org/pdf/2306.13549 话题:多模态LLMs综述 MLLMs Paper: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models 1. 摘要 近期,以GPT-4V为代表的跨模态大型语言模型(MLLM…

Java版【植物大战僵尸+源码】

上期回顾: 今天给大家推荐一个Gtihub开源项目:PythonPlantsVsZombies,翻译成中就是植物大战僵尸。 《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵,每种僵尸都有不同的特点,例如铁桶僵尸拥有极强的抗…

用 LLM 构建企业专属的用户助手

TL;DR 本文主要介绍了 PingCAP 如何使用大型语言模型(Large Language Model,LLM)构建一个搭载企业专属知识库的智能客服机器人。除了采用行业内通行的基于知识库的问题解答方法,我们还尝试让模型在“小样本(Few-Shot&…

Leetcode 100361100367.切割蛋糕的最小总开销

Medium&#xff1a;动态规划搜索&#xff08;实际就是优化后的dfs&#xff09; class Solution { public: int f[25][25][25][25] {0};int dp(int row1, int col1, int row2, int col2, vector<int>& horizontalCut, vector<int>& verticalCut){if(row1 …

Autosar RTE配置-Assembly和Delegation的使用-基于ETAS软件

文章目录 前言Assembly和Delegation的含义Delegation的使用Assembly的使用总结 前言 RTE中的Compostion内部的SWC之间的连接使用Assembly Connector进行连接。这样的连接一般都是一个SWC的Pport对应另一个SWC的Rport。而Autosar软件中往往不只一个Composition(一般可以以核的数…

Ubuntu的磁盘扩容遇到的问题

1.先用终端上的命令查看磁盘的使用情况 #查看磁盘空间容量的占用情况 $ df -h #查看当前文件夹中&#xff0c;各个文件占用磁盘空间的情况 $ du -sh* 如果容量少的话&#xff0c;需要尽快扩容 2.开机前的扩容 2.1 VMware 扩展磁盘空间 关闭当前客户机&#xff0c;在编辑虚拟…

第三季度加密市场动荡:市场缺乏炒作题材,波动加剧

摘要 根据 Arkham 的数据&#xff0c;德国政府联邦刑事调查局 (BKA) 可能已完成抛售&#xff0c;其持有量从 6 月中旬的约 50,000 BTC&#xff08;35.5 亿美元&#xff09;减少到 7 月 12 日的数据为 0 BTC。市场担忧美国经济在今年晚些时候或 2025 年初陷入衰退&#xff0c;导…

Go Web开发框架之Gin

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

MATLAB quiver矢量图 设置colorbar

给三维矢量图按照不同高度设置箭头颜色 figure clf X surfaceuz(:,1); Y surfaceuz(:,2); Z surfaceuz(:,3); hold onzcolor jet; % qquiver3(X,Y,Z,X,Y,W) for i 1:length(surfaceuz)quiver3(X(i),Y(i),Z(i),X(i),Y(i), Z(i),...Color,zcolor(floor((Z(i) - -0.1) * 2…

ArgMed-Agents:通过多个智能体论证方案增强大模型,进行可解释的临床决策推理

ArgMed-Agents&#xff1a;通过多个智能体论证方案增强大模型&#xff0c;进行可解释的临床决策推理 提出背景ArgMed-Agents 框架目的解法拆解逻辑链 临床讨论的论证方案&#xff08;ASCD&#xff09;论证方案用于决策&#xff08;ASDM&#xff09;论证方案用于副作用&#xff…