python代码运行速度有点慢 ? 教你使用多线程速度飞升
创始人
2024-05-08 11:04:37
0

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~

在我们爬取数据的时候,有时候它运行速度会非常慢

那么怎么解决呢?

这里给大家带来一个多线程的方法

我们用采集二手车来举例

环境使用:

  • Python 3.8

  • Pycharm

模块使用:

  • requests 数据请求模块

  • parsel 数据解析模块

  • re

  • csv 内置模块

一. 代码实现步骤:

  1. 发送请求, 模拟浏览器对于url地址发送请求

  2. 获取数据, 获取服务器返回响应数据

    开发者工具: response

  3. 解析数据, 提取我们想要的数据内容

    提取: 房源基本信息

  4. 保存数据, 把数据保存表格文件里面

  5. 多页数据采集

二. 代码展示

基础版

导入模块

# 导入数据请求模块 --> 第三方模块 需要安装 pip install requests
import requests
# 导入数据解析模块 --> 第三方模块 需要安装 pip install parsel
import parsel
# 导入csv
import csv
# 导入时间模块
import time

( 源码\解答\资料\教程点击此处跳转跳转文末名片加入,找管理员小姐姐领取呀~)

time_1 = time.time()

创建文件 <对象>

f = open('data.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题''小区','总价','单价','户型','面积','朝向','装修','楼层','建筑日期','建筑类型','详情页',
])

写入表头

csv_writer.writeheader()

“”"

  1. 发送请求, 模拟浏览器对于url地址发送请求
    • 伪装模拟: 请求头 字典数据类型 构建完整键值对
      headers 可以直接在开发者工具里面进行复制

    • 响应对象
      200 状态码 表示请求成功

“”"

for page in range(1, 101):try:print(f'==================正在采集第{page}页的数据内容==================')

请求链接

( 因不可抗原因,不能出现网址,会发不出去,用图片代替了,大家照着敲一下

或者点击此处跳转跳转文末名片加入裙聊,找管理员小姐姐领取呀~ )

模拟伪装

        headers = {# User-Agent 用户代理, 表示浏览器基本身份信息'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'}

发送请求

        response = requests.get(url, headers)

“”"

  1. 获取数据, 获取服务器返回响应数据

    开发者工具: response

    获取网页源代码

    • response.text 获取响应文本数据, 字符串数据类型 获取html字符串数据内容

    • response.json() 获取响应字典数据 json数据 必须是完整json数据格式

  2. 解析数据, 提取我们想要的数据内容

    提取: 房源基本信息

    解析方法:

    • xpath

    • re正则

    • css

    • json数据处理

    css选择器: 根据标签属性提取数据内容

    1. 看数据在那个标签里面

“”"

        html_data = requests.get(link).textselect = parsel.Selector(html_data)

把获取下来 html字符串数据 response.text , 转成可解析对象

        selector = parsel.Selector(response.text)

第一次提取, 把包含房源数据信息 标签全部获取下来 获取所有li标签

        lis = selector.css('sellListContent li')

for循环把列表里 元素一个一个提取出来

        for li in lis:
            源码、解答、资源、学习交流可加企鹅裙:261823976##title = li.css('.title a::text').get()  # 标题href = li.css('.title a::attr(href)').get()  # 详情页totalPrice = li.css('.totalPrice span::text').get()  # 售价unitPrice = li.css('.unitPrice span::text').get()  # 单价string = select.css('.comments div:nth-child(7) .comment_text::text').get()

join把列表合并字符串

            area = '-'.join(li.css('.info .flood .positionInfo a::text').getall())  # 小区houseInfo = li.css('.info .address .houseInfo::text').get()

split 把字符串分割成列表

            houseType = houseInfo.split(' | ')[0]  # 户型houseArea = houseInfo.split(' | ')[1]  # 面积orientation = houseInfo.split(' | ')[2]  # 朝向renovation = houseInfo.split(' | ')[3]  # 装修floor = houseInfo.split(' | ')[4]  # 楼层

判断 houseInfo.split(’ | ') 有多少个元素, 如果6个元素 说明没有建造日期

            if len(houseInfo.split(' | ')) == 6:date = ''else:date = houseInfo.split(' | ')[5]buildingType = houseInfo.split(' | ')[-1]  # 建筑类型dit = {'标题': title,'小区': area,'总价': totalPrice,'单价': unitPrice,'户型': houseType,'面积': houseArea,'朝向': orientation,'装修': renovation,'楼层': floor,源码、解答、资源、学习交流可加企鹅裙:261823976##'建筑日期': date,'建筑类型': buildingType,'详情页': href,}csv_writer.writerow(dit)print(string)except:print('报名系统课程可以添加清风老师微信: pythonmiss')

多线程版

mport requests
import parsel
import re
import csv
# 线程池模块
import concurrent.futures
import timedef get_response(html_url):"""发送请求函数:param html_url::return:"""headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'}response = requests.get(url=html_url, headers=headers)return responsedef get_content(html_url):"""获取数据函数:param html_url::return:"""response = get_response(html_url)html_data = get_response(link).textselector = parsel.Selector(response.text)select = parsel.Selector(html_data)lis = selector.css('.sellListContent li')content_list = []for li in lis:title = li.css('.title a::text').get()  # 标题area = '-'.join(li.css('.positionInfo a::text').getall())  # 小区Price = li.css('.totalPrice span::text').get()  # 总价Price_1 = li.css('.unitPrice span::text').get().replace('元/平', '')  # 单价houseInfo = li.css('.houseInfo::text').get()  # 信息HouseType = houseInfo.split(' | ')[0]  # 户型HouseArea = houseInfo.split(' | ')[1].replace('平米', '')  # 面积direction = houseInfo.split(' | ')[2].replace(' ', '')  # 朝向renovation = houseInfo.split(' | ')[3]  # 装修floor_info = houseInfo.split(' | ')[4]floor = floor_info[:3]  # 楼层floor_num = re.findall('(\d+)层', floor_info)[0]  # 层数BuildingType = houseInfo.split(' | ')[-1]string = select.css('.comments div:nth-child(7) .comment_text::text').get()href = li.css('.title a::attr(href)').get()  # 详情页if len(houseInfo.split(' | ')) == 6:date = 'None'else:date = houseInfo.split(' | ')[5].replace('年建', '')  # 日期print(string)dit = {源码、解答、资源、学习交流可加企鹅裙:261823976##'标题': title,'内容': string,'小区': area,'总价': Price,'单价': Price_1,'户型': HouseType,'面积': HouseArea,'朝向': direction,'装修': renovation,'楼层': floor,'层数': floor_num,'建筑日期': date,'建筑类型': BuildingType,'详情页': href,}content_list.append(dit)return content_listdef main(page):"""主函数:param page::return:"""print(f'===============正在采集第{page}页的数据内容===============')

    content_list = get_content(html_url=url)for content in content_list:csv_writer.writerow(content)if __name__ == '__main__':time_1 = time.time()link = 'http:// *******.com/article/149'# 创建文件f = open('data多线程.csv', mode='a', encoding='utf-8', newline='')csv_writer = csv.DictWriter(f, fieldnames=['标题','内容','小区','总价','单价','户型','面积','朝向','装修','楼层','层数','建筑日期','建筑类型','详情页',])csv_writer.writeheader()# 线程池执行器 max_workers 最大线程数exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)for page in range(1, 11):exe.submit(main, page)exe.shutdown()time_2 = time.time()use_time = int(time_2 - time_1)# 总计耗时: 9print('总计耗时:', use_time)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

相关内容

热门资讯

安卓系统计划软件推荐,精选计划... 你有没有发现,手机里的安卓系统越来越智能了?这不,最近我可是挖到了一些超棒的安卓计划软件,它们不仅能...
收钱吧安卓系统插件,便捷支付新... 你有没有发现,现在的生活越来越离不开手机了?手机里装满了各种应用,而今天我要跟你聊聊一个特别实用的工...
鸿蒙系统是否还属于安卓,独立于... 你有没有想过,那个在我们手机上默默无闻的鸿蒙系统,它到底是不是安卓的“亲戚”呢?这个问题,估计不少手...
安卓系统手机用什么钱包,轻松管... 你有没有想过,你的安卓系统手机里装了那么多应用,但最离不开的,可能就是那个小小的钱包了。没错,就是那...
安卓系统能玩部落冲突吗,部落冲... 你有没有想过,安卓系统上的手机,是不是也能玩那款风靡全球的《部落冲突》呢?这款游戏自从推出以来,就吸...
智能机器人安卓系统,引领未来智... 你知道吗?在科技飞速发展的今天,智能机器人已经不再是科幻电影里的专属了。它们正悄悄地走进我们的生活,...
华为win10系统改装安卓系统... 你有没有想过,你的华为笔记本电脑里的Windows 10系统,能不能来个华丽变身,变成安卓系统呢?这...
旧电脑上安什么安卓系统,适配不... 你那台旧电脑是不是已经闲置好久了?别让它默默无闻地躺在角落里,给它来个华丽变身吧!今天,就让我来告诉...
安卓app语言跟随系统,随系统... 你知道吗?在手机世界里,有一个神奇的小功能,它就像你的贴身翻译官,无论你走到哪里,都能帮你轻松应对各...
惠城安卓系统降级在哪,揭秘降级... 你有没有遇到过手机系统升级后,发现新系统让你头疼不已,想回到那个熟悉的安卓系统呢?别急,今天就来告诉...
阿里云系统转安卓,揭秘安卓平台... 你知道吗?最近有个大动作在互联网圈里引起了不小的波澜,那就是阿里云系统竟然要转战安卓阵营了!这可不是...
安卓系统有最美壁纸么,探寻最美... 哦,亲爱的安卓用户,你是否曾在某个午后,百无聊赖地翻看着手机,突然被那一张张壁纸惊艳了眼眸?是的,我...
安卓系统采用Linux操作系统... 你知道吗?安卓系统,这个在我们手机上无处不在的小家伙,它的心脏竟然是Linux操作系统内核!是不是觉...
安卓原生平板通用系统,探索安卓... 你有没有发现,现在市面上平板电脑的品牌和型号真是五花八门,让人挑花了眼?不过,你知道吗?在众多安卓平...
小米1系统是安卓几,搭载安卓几... 你有没有想过,你的小米手机里那个熟悉的系统,其实是基于安卓的哦!没错,就是那个全球最流行的手机操作系...
可以安装安卓系统的相机,智能摄... 你有没有想过,一台相机不仅能拍出美美的照片,还能像智能手机一样,玩转各种应用?没错,现在市面上就有这...
安卓系统gps定位不准,安卓G... 你是不是也遇到过这种情况?手机里的安卓系统GPS定位总是不准,让人头疼不已。有时候,你明明就在家附近...
电信机顶盒装安卓系统,开启智能... 你有没有想过,家里的电信机顶盒其实也可以装上安卓系统呢?听起来是不是有点不可思议?别急,让我带你一步...
安卓系统可以做苹果桌面,打造个... 你知道吗?现在科技的发展真是让人眼花缭乱,竟然有人想出了安卓系统可以做苹果桌面的神奇想法!是不是觉得...
安卓系统自带的网页,功能与特色... 你有没有发现,每次打开安卓手机,那熟悉的系统界面里总有一个默默无闻的小家伙——安卓系统自带的网页浏览...