首页 > 编程语言 >python多线程爬取药品信息

python多线程爬取药品信息

时间:2024-12-22 22:56:10浏览次数:7  
标签:csv python 药品 爬取 url import 多线程

多线程爬取药品信息

利用多线程来获取药品信息可以实现高效的爬取,方便我们自己对药品的名称、价格以及功效进行了解和掌握

导入需要使用到的包

from concurrent.futures.thread import ThreadPoolExecutor
from lxml import etree
import requests
import random
import csv 

目标网站

39药品通

这个网站提供的药品信息非常全,本身网站做的也很简洁明了,标签规整,非常适合信息爬取

以皮肤用药为例,我们可以利用xpath定位来定位我们想要获取到的元素

在这里插入图片描述

分别是名称,适用症状以及药品参考价格

知道这些信息之后开始写代码

  1. 首先我们利用文件管理以及csv的writer构造我们要使用的写入文件对象
fp = open('../dataset/druginfo.csv', 'a+', encoding='utf-8', newline='')
writer = csv.writer(fp)
  1. 之后再构造headers和代理池(如果有购买就用你购买的)防止ip封锁反爬
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1660.57",
}

proxies_pool = [
    {'http': '114.231.109.88:8088'},
    {'http': '114.231.42.23:8808'},
    {'http': '113.223.215.204:8080'},
    {'http': '117.69.136.23:8009'},
    ]
  1. 接着定义一个download函数用来接收我们传入的url并对数据进行解析和下载
def download(url):
    proxies = random.choice(proxies_pool)
    response = requests.get(url=url, headers=headers, proxies=proxies)
    content = response.text
    tree = etree.HTML(content)  # IMPORTANT:调用etree解析页面源码
    namelst = tree.xpath('//div[@class="drugs-brief"]/p/a/@title')  # TIPS:获取药品名称
    efficacylst = tree.xpath('//div[@class="drugs-brief"]/p[2]/text()')  # TIPS:药品功效概述
    pricelst = tree.xpath('//div[@class="drugs-brief"]/p[4]/span/text()')  # TIPS:药品价格
    for i in range(len(namelst)):
        name = namelst[i].strip()
        efficacy = efficacylst[i].strip()
        try:
            price = pricelst[i].strip()
        except IndexError:
            price = ' '
        infolst = [name, efficacy, price]
        # tips:当然这里还可以用拼接字符串的写法
        print(infolst)
        writer.writerow(infolst)

注意上面代码写了一处异常处理,因为爬取的时候报错了,然后我发现后面有些页面的药品是没有标注价格的!!!
在这里插入图片描述

  1. 接下来构造主函数
if __name__ == '__main__':
    with ThreadPoolExecutor(10) as t:  # important:开启大小为20的线程池
        for j in range(1, 80):
            url = f'https://ypk.39.net/pifu/p{j}/'
            t.submit(download, url)

由于皮肤用药大概有88页,所以在主函数中设置到80页看看效果
在这里插入图片描述

注意:

  • 我们在主函数中开启了线程池,大小指定为10,构造循环遍历页码然后利用.submit将url作为参数传入到我们写的download函数中去让它来处理传入的url,对其进行解析并获取我们要爬取的信息,然后写入到csv文件当中
运行结果

在这里插入图片描述
获取了1200多条数据,而且因为开启了多线程,运行速度很快

如果本文对你使用多线程爬取有帮助,请点赞收藏,您的鼓励是我创作的动力
请添加图片描述

标签:csv,python,药品,爬取,url,import,多线程
From: https://blog.csdn.net/weixin_45938063/article/details/144653870

相关文章

  • 基于Python实现的高校宿舍管理系统
    《基于Python的高校宿舍管理系统的设计和实现》该项目采用技术Python的django框架、mysql数据库,项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等软件开发环境及开发工具:开发语言:python使用框架:Django前端技术:JavaScript、VUE.js(2......
  • python pandas 优化内存占用(一)
            最近我用python处理excel,使用的是pandas库,我发现pandas库非常占用内存,一直想研究下如何优化pandas的内存占用,但一直没腾出空来,最近终于有时间研究一把了,我先把优化方法写上,如果你想了解更多的内容,可以看一下XX这篇文章,我优化的思路来源https://www.sohu.com......
  • Python 函数
    一,函数的定义与调用:当你在写程序时,有一个模块一直用的是相同的的代码,所以我们为了提高代码的效率和代码的重用,所以把具有独立的代码块组织为一个小模块,我们把他叫为函数。在Python中,函数是一段可重复使用的代码块,用于执行特定的任务。它通过def关键字来定义函数。defgreet......
  • 基于python实现用户注册与校验
    实现用户注册与校验common—源码"""一、基础功能需求1. 综合使用当前所学知识,如列表、字典、字符串、函数等,实现一个基于命令行的用户注册功能。2. 用户注册时必须要输入用户名、密码、手机号码,用针对用户的输入必须进行验证。3. 用户名的规则:只能是大小写字母或数字......
  • Python实例之函数基础打卡篇
    大家晚上好~今日学习之函数打卡。要求:自动打卡定义一个函数,函数名任意,要求调用函数后实现自动打卡;上午打卡时间为8点到9点,下午打卡时间为14点到15点,让用户输入打卡时间,如果时间在8点到9点之间,提示”早上好,打卡成功新的一天“,如果时间在14点到15点之间,提示“下午好,打卡成功不......
  • python怎么看矩阵维数
    print(X.shape):查看矩阵的行列号print(len(X)):查看矩阵的行数print(X.ndim):查看矩阵的维数1、查看矩阵的行列号2、查看矩阵的行数3、查看矩阵的维数......
  • python中怎么提取关键词
    简单的关键词提取文章内容关键词的提取分为三大步: (1)分词 (2)去停用词 (3)关键词提取分词方法有很多,我这里就选择常用的结巴jieba分词;去停用词,我用了一个停用词表。具体代码如下:import jiebaimport jieba.analyse#第一步:分词,这里使用结巴分词全模式text = '''......
  • Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
    前言:在Python编程的广阔天地中,字符串处理无疑是一项基础而关键的技能。正则表达式,作为处理字符串的强大工具,以其灵活的模式匹配能力,在文本搜索、数据清洗、格式验证等领域发挥着不可替代的作用。本系列博客已经带领大家逐步深入了Python字符串操作的多个方面,从基础的字......
  • 千峰教育--Netty 再学习 1 网络模型概述(BIO、NIO、AIO)、BIO 逻辑实现及其局限性(单线程
    课程介绍1网络模型概述2Channel详解3Buffer详解4Selector详解5NIO综合案例-聊天室6AIO概念及实现 1网络编程IO模型介绍1.1BLockingIOBlockingIO也称BIO,及同步阻塞IO。Java的io包基于流模型实现,提供了FIle,FileInputStream,FileOutputStream等输入输出流......
  • Python大学生课程在线考试组卷管理系统
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍考试管理系统主要是为了用户方便对班级信息、通知公告、课程信息、试题管理、试卷、......