当前位置: 首页 > wzjs >正文

北京微信网站设计费用wordpress如何添加远程数据库

北京微信网站设计费用,wordpress如何添加远程数据库,官网和门户网站的区别,申请域名哪个网站好一、同步爬虫的瓶颈 传统的同步爬虫(如requestsBeautifulSoup)在请求网页时,必须等待服务器返回响应后才能继续下一个请求。这种阻塞式I/O操作在面对大量数据时存在以下问题: 速度慢:每个请求必须串行执行&#xff0…

一、同步爬虫的瓶颈

传统的同步爬虫(如requests+BeautifulSoup)在请求网页时,必须等待服务器返回响应后才能继续下一个请求。这种阻塞式I/O操作在面对大量数据时存在以下问题:

  1. 速度慢:每个请求必须串行执行,无法充分利用网络带宽。
  2. 易被封禁:高频请求可能触发IP限制或验证码。
  3. 资源浪费:CPU在等待I/O时处于空闲状态。

解决方案:异步爬虫(Asynchronous Crawling)
Python的asyncio+aiohttp库可以实现非阻塞I/O,允许同时发起多个请求,大幅提升爬取效率。

二、异步爬虫技术选型

技术方案适用场景优势
aiohttpHTTP请求异步HTTP客户端,支持高并发
asyncio事件循环Python原生异步I/O框架
aiofiles异步文件存储避免文件写入阻塞主线程
uvloop加速事件循环替换asyncio
默认循环,性能提升2-4倍

三、实战:异步爬取新浪财经股票数据

目标

  • 爬取新浪财经A股股票实时行情(代码、名称、价格、涨跌幅等)。
  • 使用aiohttp实现高并发请求。
  • 存储至CSV文件,避免数据丢失。

步骤1:分析数据接口

新浪财经的股票数据通常通过API返回,我们可以通过浏览器开发者工具(F12)抓包分析:

  • 示例接口:https://finance.sina.com.cn/realstock/company/sh600000/nc.shtml
  • 数据格式:部分数据直接渲染在HTML中,部分通过Ajax加载(如分时数据)。

步骤2:安装依赖库

步骤3:编写异步爬虫代码

import asyncio
import aiohttp
import aiofiles
from bs4 import BeautifulSoup
import csv
import time# 替换为新浪财经股票列表API(示例)
STOCK_LIST_API = "https://finance.sina.com.cn/stock/sl/stock_list.html"
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}async def fetch(session, url):"""异步获取网页内容"""async with session.get(url, headers=HEADERS) as response:return await response.text()async def parse_stock_data(html):"""解析股票数据(示例:仅提取名称和价格)"""soup = BeautifulSoup(html, "html.parser")stock_name = soup.select_one(".stock-name").text.strip() if soup.select_one(".stock-name") else "N/A"stock_price = soup.select_one(".price").text.strip() if soup.select_one(".price") else "N/A"return {"name": stock_name, "price": stock_price}async def save_to_csv(data, filename="stocks.csv"):"""异步写入CSV"""async with aiofiles.open(filename, mode="a", encoding="utf-8", newline="") as f:writer = csv.writer(f)await writer.writerow([data["name"], data["price"]])async def crawl_stock(stock_code, session):"""爬取单只股票数据"""url = f"https://finance.sina.com.cn/realstock/company/{stock_code}/nc.shtml"try:html = await fetch(session, url)data = await parse_stock_data(html)await save_to_csv(data)print(f"爬取成功:{stock_code} - {data['name']}")except Exception as e:print(f"爬取失败:{stock_code} - {str(e)}")async def main():"""主协程:并发爬取多个股票"""stock_codes = ["sh600000", "sh601318", "sz000001"]  # 示例股票代码(可扩展)# 使用uvloop加速(仅限Unix系统)try:import uvloopasyncio.set_event_loop_policy(uvloop.EventLoopPolicy())except ImportError:pass# 创建aiohttp会话async with aiohttp.ClientSession() as session:tasks = [crawl_stock(code, session) for code in stock_codes]await asyncio.gather(*tasks)if __name__ == "__main__":start_time = time.time()asyncio.run(main())print(f"爬取完成,耗时:{time.time() - start_time:.2f}秒")

四、性能优化策略

1. 控制并发量

新浪财经可能限制高频请求

2. 使用代理IP

避免IP被封:

3. 随机User-Agent

减少被识别为爬虫的概率:

4. 数据存储优化

  • 异步数据库写入:如aiomysqlasyncpg
  • 批量写入:减少I/O次数。
import asyncio
import aiohttp
from bs4 import BeautifulSoup
import pandas as pd
from fake_useragent import UserAgent
import aiomysql# 使用 Semaphore 限制并发数
semaphore = asyncio.Semaphore(10)  # 最大并发 10# 代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"# 构造代理 URL
PROXY = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"# 随机 User-Agent
ua = UserAgent()# 数据库配置
DB_CONFIG = {'host': 'localhost','port': 3306,'   user': 'your_username','password': 'your_password','db': 'your_database','charset': 'utf8mb4'
}# 数据存储优化:异步数据库写入
async def save_to_db(data):conn = await aiomysql.connect(**DB_CONFIG)async with conn.cursor() as cur:await cur.executemany("INSERT INTO finance_data (column1, column2, column3) VALUES (%s, %s, %s)", data)await conn.commit()conn.close()# 爬取单个股票数据
async def crawl_stock(stock_code, session):async with semaphore:url = f"https://finance.sina.com.cn/stock/{stock_code}.html"HEADERS = {"User-Agent": ua.random}async with session.get(url, headers=HEADERS, proxy=PROXY) as response:html = await response.text()data = parse(html)return data# 解析网页内容
def parse(html):soup = BeautifulSoup(html, 'html.parser')# 假设数据在特定的表格中table = soup.find('table', {'class': 'example'})data = []for row in table.find_all('tr'):cols = row.find_all('td')cols = [ele.text.strip() for ele in cols]data.append([ele for ele in cols if ele])return data# 主函数
async def main(stock_codes):async with aiohttp.ClientSession() as session:tasks = [crawl_stock(stock_code, session) for stock_code in stock_codes]all_data = await asyncio.gather(*tasks)# 扁平化数据flat_data = [item for sublist in all_data for item in sublist]# 异步批量写入数据库await save_to_db(flat_data)# 示例股票代码列表
stock_codes = ['000001','000002',# 更多股票代码
]# 运行爬虫
asyncio.run(main(stock_codes))

五、对比同步与异步爬虫性能

指标同步爬虫(requests)异步爬虫(aiohttp)
100次请求耗时~20秒~3秒
CPU占用低(大量时间在等待)高(并发处理)
反爬风险高(易触发封禁)较低(可控并发)

文章转载自:

http://pe1XM2Wv.smdkk.cn
http://HBYRDtiS.smdkk.cn
http://A7W2Aspq.smdkk.cn
http://vQ63U0H5.smdkk.cn
http://2wLlwdOY.smdkk.cn
http://3QWpiKpJ.smdkk.cn
http://oVk3JDYS.smdkk.cn
http://7ptJ1J0r.smdkk.cn
http://cb5oeshz.smdkk.cn
http://eFerSGbe.smdkk.cn
http://fNKpmRWO.smdkk.cn
http://Ac2bSUBV.smdkk.cn
http://TafY2XqN.smdkk.cn
http://xsG0IT5K.smdkk.cn
http://WZdFTqLm.smdkk.cn
http://bdyNUqs9.smdkk.cn
http://61CaK3VG.smdkk.cn
http://SStn5EWp.smdkk.cn
http://ktG3jFLi.smdkk.cn
http://6lvZvbC1.smdkk.cn
http://jy31wfAN.smdkk.cn
http://F8C3UfeI.smdkk.cn
http://GRRwWhza.smdkk.cn
http://SRlUUsFD.smdkk.cn
http://6uHGOSFi.smdkk.cn
http://uZ4E33aX.smdkk.cn
http://rooLrXuA.smdkk.cn
http://iSyq2wsC.smdkk.cn
http://RfEiPAKW.smdkk.cn
http://XBCFdo44.smdkk.cn
http://www.dtcms.com/wzjs/647476.html

相关文章:

  • 贵州网站推广网站建设 应酷
  • 外贸营销网站建设公司青岛城乡建设局网站首页
  • 网站如何做360度全景python cms系统
  • 芯火信息做网站怎么样躺平淘宝设计家官网
  • html制作企业宣传网站重庆景观设计公司有哪些
  • 做安全防护信息的网站个人建站怎么做网站好
  • 阿里巴巴网站分类板块做全屏电子政务门户网站建设汇报
  • 建网站教程网站建设大图
  • 网站建设佰首选金手指六公司网站引导页
  • 高邮市城乡建设局网站proxy网站
  • 佛山网站上排名装修之家
  • 苏州企业网站建设专家那些网站用不着做优化
  • 淄博网站建设哪家便宜深圳自适应网站制作
  • 网站建设 电子商务网站开发洛阳霞光只做有效果的网站
  • 上海建筑网站大全网页游戏大全电脑版在线玩
  • 数据网站建设哪个好wordpress 您不能在您服务器的地址上安装一个网络
  • 世纪购网站开发招聘网页自我介绍制作模板
  • 云南省住房和城乡建设厅勘察设计处网站wordpress必做
  • 安徽中擎建设公司网站wordpress 地图相册
  • dw做的网页在网站图片不显示网站模板 英文
  • 绵阳网站托管长宁网站建设制作
  • 广东网站开发搭建电脑室内装修设计软件
  • 开发网站要多少钱网站 设计 案例 简单
  • 网站设计西安学习上虞宇普电器网站建设
  • 山东省示范校建设网站北京互联网公司开发的网站
  • 个人备案后可以做电影网站吗苏州集团网站设计定制
  • 个人网站备案名和运营西安注册公司地址可以是住宅吗
  • 网站开发验收确 认书海外公司推广
  • 做商城网站的公司中国造价网
  • 官网域名改版方案山东seo网络推广