来源:凹凸数据
项目来源:
漂亮学姐因为工作需要,得根据已有的学校名单,采集它们的英文名称,描述,简称有的话也带上。共有 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/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
凹凸福利
????《人工智能数学基础》数学思维的体操、学习人工智能的基石!通过205个典型范例+185个推导公式+37道经典习题+40个学习难点提示+19个项目,进行数学思想和解决方案的有效实践。点击下图可看详情/购买!????
感谢北京大学出版社支持!周日统一兑换!后台回复“读书会”进群,获取最新书籍信息!后台“左下菜单栏”轻松赚币,免费包邮带回家!
转载:https://blog.csdn.net/zhuxiao5/article/details/112301057