专栏首页凹凸玩数据Python爬虫自动化,帮小姐姐解放双手

Python爬虫自动化,帮小姐姐解放双手

来源:凹凸数据

项目来源:

漂亮学姐因为工作需要,得根据已有的学校名单,采集它们的英文名称,描述,简称有的话也带上。共有 2740 条学校名称数据,一条条去搜索得到结果,然后复制粘贴到表格里,一天下来估计人都傻了。

花几分钟写了个爬虫小程序,帮助小姐姐解放了双手,成功表现了一波,学姐一阵夸奖,还请我喝了一杯美式咖啡,美滋滋。

分析问题

共有 2740 条学校名称数据

在百度百科中搜索清华大学看看

查看网页源代码,可以惊喜的发现,简要描述的数据羡显目地躺在开头!

经过分析可以发现,网页结构简单,可以通过构造URL请求,获取网页源码,然后从中提取我们想要的数据即可

爬虫代码

当当当,下面该我们的爬虫上场了

导入需要用到的库

import requests
import pandas as pd
from random import choice
from lxml import etree
import openpyxl
import logging

基本配置参数

# 日志输出的基本配置
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
wb = openpyxl.Workbook()    # 创建工作簿对象
sheet = wb.active    # 获取活动的工作表
sheet.append(['学校名称', '中文简称', '学校名称(英文)', '描述', '百度百科链接'])   # 添加第一行列名

# 产生随机请求头用于切换
user_agent = [
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
......
    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
    ]

读取数据、爬取网页

# 读取已有的学校名称数据
df = pd.read_excel('学校名称.xlsx')['学校名称']
items = df.values

# 遍历  获取每所学校名称
for item in items:
    try:
        # 随机生成请求头
        headers = {
            'User-Agent':choice(user_agent)
        }
        # 构造url
        url = f'https://baike.baidu.com/item/{item}'
        # 发送请求   获取响应
        rep = requests.get(url, headers=headers)
        # Xpath解析提取数据
        html = etree.HTML(rep.text)
        # 描述
        description = ''.join(html.xpath('/html/head/meta[4]/@content'))
        # 外文名
        en_name = ','.join(html.xpath('//dl[@class="basicInfo-block basicInfo-left"]/dd[2]/text()')).strip()
        # 中文简称  有的话  是在dd[3]标签下
        simple_name = ''.join(html.xpath('//dl[@class="basicInfo-block basicInfo-left"]/dd[3]/text()')).strip()
        sheet.append([item, simple_name, en_name, url])
        logging.info([item, simple_name, en_name, description, url])

    except Exception as e:
        logging.info(e.args)
        pass

# 保存数据
wb.save('成果.xlsx')

运行效果如下:

有 2740 页的数据需要请求爬取,为了提高爬取效率,可以使用多线程。

扫码关注「快学Python」(非本号)后台回复“0106” ,获取完整代码

运行效果如下:

程序运行一会儿,数据就全部爬取下来啦。

因为开多线程,爬取的顺序会打乱,按照学姐给的学校名称的表格里的顺序排列好,就可以交付了。

# 程序中记录一下它原本的序号   一起写入Excel
 sort_num = items.index(item)
import pandas as pd

# 读取数据
df = pd.read_excel('成果.xlsx')
# 按原始序号排序
df1 = df.sort_values(by='原始序号')
# 查看排序后的数据
df1.head(8)

运行效果如下:

作者:叶庭云 CSDN:https://yetingyun.blog.csdn.net/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

本文分享自微信公众号 - 凹凸数据(alltodata),作者:叶庭云

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 讲一下数据分析思维

    今天邀请好友分享的主题四个字:数据思维,听上去可能有点扯淡,总觉得还不如多学一行SQL优化啥的,但细品非常重要,将借助滴滴的实际业务做分享,以下是全文内容。

    朱小五
  • 用Python爬取糗事百科段子,可视化后结果发现

    生活真是太苦了,需要找点快乐的精神食粮支撑社畜生活,听说糗事百科段子挺多,今天就来看一看!

    朱小五
  • 手撕numpy(五):一招帮你彻底搞懂axis=0和axis=1

    思考:给你一个三维数组,你知道如何设置axis轴的值吗?下面这张图展示的结果你知道怎么来的吗?这些疑问都会在文中给你一一解答。

    朱小五
  • 什么是 Uptime TIER 数据中心等级认证体系?-孙长青

    Uptime Institute成立于1993年,20余年来长期致力于数据中心基础设施的探索和研究,是全球公认的数据中心标准组织和第三方认证机构。其主要标准《D...

    数据中心DATACenter_PUE-POE
  • MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法

    利用:from sqlalchemy import create_engine 链接数据库的过程中报错(数据量大时) sqlalchemy.exc.Op...

    学到老
  • 代理的基本原理

    崔庆才
  • MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法

    利用:from sqlalchemy import create_engine 链接数据库的过程中报错(数据量大时) sqlalchemy.exc.Op...

    学到老
  • 接口参数 Model 中的数据放在 session 中还是 request 中?

    在 SpringMVC 中,大家都知道有一个特殊的参数 Model,它的使用方式像下面这样:

    江南一点雨
  • 基于matplotlib的2D/3D抽象网格和能量曲线绘制程序

    專 欄 ❈PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,蒙...

    Python中文社区
  • 分享:Oracle sql语句优化

    最近做查询时,写的一条查询语句用了两个IN,导致tuexdo服务积压了不少,用户没骂就不错了。最后经过技术经理的点拨,sql语句性能提升了大约10倍,主要用了表...

    williamwong

扫码关注云+社区

领取腾讯云代金券

,,