全国美容大夫数据采集数据(花容网 huaroo 公开数据),爬虫120例之26例

230 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

本次要抓取的目标网站为【整形医生数据】,其中用到的 queue 模块,需要在 预备知识篇 进行学习。

目标站点数据源分析

目标地址为:https://www.huaroo.net/d/pg_1/,爬取数据区域如下图所示:

花容网 huaroo、全国美容大夫数据采集数据(公开数据),爬虫120例之24例 整理目标数据格式为:

姓名,所在医院,当前职务,从医时间,擅长项目

分页规则如下:

https://www.huaroo.net/d/pg_1/
https://www.huaroo.net/d/pg_2/

其中 pg_页码 为页码跳转规则,可以通过代码爬取获取,也可以直接手动输入。

测试过程中发现网页响应速度有点慢,但是没有反爬措施,顾将请求等待时间设置的长一些即可实现。

编码时间

下述编码中使用到了 queue 模块,即队列机制,不过并没有使用生产者与消费者模型,所谓的生产者直接使用一个循环进行了生成。

线程部分开启了 2 个线程,通过判断队列是否为空,在进行后续的数据请求工作。

每次获取数据完毕之后,都使用 q.task_done() 告知任务完成。

格式化数据使用 lxml 模块进行提取。

import requests
import threading
from queue import Queue
from lxml import etree
import time
import random

# 初始化一个队列
q = Queue(maxsize=0)
# 批量添加数据
for page in range(1, 502):
    q.put('https://www.huaroo.net/d/pg_{}/'.format(page))

# 获取头文件,其中的 uas 自行设置
def get_headers():
    uas = [
        "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)",
        "Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)"
    ]
    ua = random.choice(uas)
    headers = {
        "user-agent": ua,
        "referer": "https://www.baidu.com"
    }
    return headers

# 格式化数据
def format(text):
    element = etree.HTML(text)
    # print(element)
    article_list = element.xpath('//div[contains(@class,"article_list")]')
    # print(article_list)
    wait_save_str = ""
    # 通过 xpath 提取数据
    for article in article_list:

        title = article.xpath("./a/div/div[@class='article_title']/text()")[0].strip()
        hospital = article.xpath("./a/div/div[@class='hospital_list_content mt10 oh']/div[1]/text()")[0].strip()
        duties = article.xpath("./a/div/div[@class='hospital_list_content mt10 oh']/div[2]/text()")[0].strip()
        practice = article.xpath("./a/div/div[@class='hospital_list_content mt10 oh']/div[3]/text()")[0].strip()
        project = article.xpath("./a/div/div[@class='hospital_list_content mt10 oh']/div[4]/text()")[0].strip()
        wait_save_str += f"{title},{hospital},{duties},{practice},{project}\n"
    save(wait_save_str)

# 储存数据
def save(wait_save_str):
    with open('./医美.csv', 'a+', encoding='utf-8') as f:
        f.write(wait_save_str)
    print(wait_save_str, "---保存成功")


# 爬虫请求与解析入口
def run():
    while q.qsize() > 0:
        url = q.get()
        # print(url)
        q.task_done()
        res = requests.get(url=url, headers=get_headers(), timeout=10)
        format(res.text)



l = []
for i in range(2):
    t = threading.Thread(target=run)
    l.append(t)
    t.start()

for p in l:
    p.join()

print("多线程执行完毕")

q.join()
print("所有线程运行完毕")

代码运行之后,显示如下结果。

花容网 huaroo、全国美容大夫数据采集数据(公开数据),爬虫120例之24例

收藏时间

代码仓库地址:codechina.csdn.net/hihell/pyth…,去给个关注或者 Star 吧。

数据采集过程中,采集的 50000 数据

==来都来了,不发个评论,点个赞,收个藏吗?==

今天是持续写作的第 208 / 365 天。 可以关注我,点赞我、评论我、收藏我啦。

**更多精彩