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

叶庭云 凹凸数据

来源:凹凸数据

项目来源:
漂亮学姐因为工作需要,得根据已有的学校名单,采集它们的英文名称,描述,简称有的话也带上。共有 2740 条学校名称数据,一条条去搜索得到结果,然后复制粘贴到表格里,一天下来估计人都傻了。
花几分钟写了个爬虫小程序,帮助小姐姐解放了双手,成功表现了一波,学姐一阵夸奖,还请我喝了一杯美式咖啡,美滋滋。

分析问题


共有 2740 条学校名称数据
在百度百科中搜索清华大学看看


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

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

爬虫代码

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

导入需要用到的库

import requestsimport pandas as pdfrom random import choicefrom lxml import etreeimport openpyxlimport 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/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

©著作权归作者所有:来自51CTO博客作者mb5fe18e5a55d8d的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
  2. 2000万条直播数据,揭秘斗鱼主播生存现状
  3. 破解X眼电影字体动态加密|凹凸玩数据
  4. Python爬取上万条大众点评数据,解读一线快餐品牌背后的秘密
  5. 放大招!耗时一个月,早起做了一个Python数据可视化APP?
  6. 收藏这些API,获取网易云音乐数据超轻松
  7. 如何用python进行数据分析——00环境配置
  8. Python爬取近十年TIOBE编程语言热度数据并可视化可视化
  9. 手把手教你用Selenium爬取拉勾网数据!

随机推荐

  1. Android 自带图标库 android.R.drawable
  2. Android触控事件
  3. rock960 android box compiling!
  4. [Android实例] android实现顶级圆角弹窗(
  5. Android 问题(一)
  6. android对话框的使用
  7. android的Material Design点击涟漪效果
  8. NoClassDefFoundError with Android Stud
  9. SDK下载地址
  10. Android(安卓)MMS 源码流程