小言_互联网的博客

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

310人阅读  评论(0)


来源:凹凸数据

项目来源:

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

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

分析问题

共有 2740 条学校名称数据

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

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

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

爬虫代码

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

导入需要用到的库


   
  1. import requests
  2. import pandas as pd
  3. from random  import choice
  4. from lxml  import etree
  5. import openpyxl
  6. import logging

基本配置参数


   
  1. # 日志输出的基本配置
  2. logging.basicConfig(level=logging.INFO, format= '%(asctime)s - %(levelname)s: %(message)s')
  3. wb = openpyxl.Workbook()    # 创建工作簿对象
  4. sheet = wb.active    # 获取活动的工作表
  5. sheet. append([ '学校名称''中文简称''学校名称(英文)''描述''百度百科链接'])   # 添加第一行列名
  6. # 产生随机请求头用于切换
  7. user_agent = [
  8.      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
  9.      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
  10. ......
  11.      "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
  12.     ]

读取数据、爬取网页


   
  1. # 读取已有的学校名称数据
  2. df = pd.read_excel( '学校名称.xlsx')[ '学校名称']
  3. items = df.values
  4. # 遍历  获取每所学校名称
  5. for item in items:
  6.     try:
  7.         # 随机生成请求头
  8.         headers = {
  9.              'User-Agent':choice(user_agent)
  10.         }
  11.         # 构造url
  12.         url = f 'https://baike.baidu.com/item/{item}'
  13.         # 发送请求   获取响应
  14.         rep = requests.get(url, headers=headers)
  15.         # Xpath解析提取数据
  16.         html = etree.HTML(rep.text)
  17.         # 描述
  18.         description =  ''.join(html.xpath( '/html/head/meta[4]/@content'))
  19.         # 外文名
  20.         en_name =  ','.join(html.xpath( '//dl[@class="basicInfo-block basicInfo-left"]/dd[2]/text()')).strip()
  21.         # 中文简称  有的话  是在dd[ 3]标签下
  22.         simple_name =  ''.join(html.xpath( '//dl[@class="basicInfo-block basicInfo-left"]/dd[3]/text()')).strip()
  23.         sheet. append([item, simple_name, en_name, url])
  24.         logging.info([item, simple_name, en_name, description, url])
  25.     except Exception as e:
  26.         logging.info(e.args)
  27.         pass
  28. # 保存数据
  29. wb.save( '成果.xlsx')

运行效果如下:

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

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

后台回复“ 0106”获取完整代码

运行效果如下:

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

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


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

   
  1. import pandas as pd
  2. # 读取数据
  3. df = pd.read_excel( '成果.xlsx')
  4. # 按原始序号排序
  5. df1 = df.sort_values(by= '原始序号')
  6. # 查看排序后的数据
  7. df1.head( 8)

运行效果如下:

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

凹凸福利

????《人工智能数学基础》数学思维的体操、学习人工智能的基石!通过205个典型范例+185个推导公式+37道经典习题+40个学习难点提示+19个项目,进行数学思想和解决方案的有效实践。点击下图可看详情/购买!????

感谢北京大学出版社支持!周日统一兑换!后台回复“读书会”进群,获取最新书籍信息!后台“左下菜单栏”轻松赚币,免费包邮带回家!


转载:https://blog.csdn.net/zhuxiao5/article/details/112301057
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场