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

项目来源:

漂亮学姐因为工作需要,得根据已有的学校名单,采集它们的英文名称,描述,简称有的话也带上。共有 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. # 产生随机请求头用于切换

  8. user_agent = [

  9. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",

  10. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",

  11. ......

  12. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"

  13. ]

读取数据、爬取网页

  1. # 读取已有的学校名称数据

  2. df = pd.read_excel('学校名称.xlsx')['学校名称']

  3. items = df.values

  4.  
  5. # 遍历 获取每所学校名称

  6. for item in items:

  7. try:

  8. # 随机生成请求头

  9. headers = {

  10. 'User-Agent':choice(user_agent)

  11. }

  12. # 构造url

  13. url = f'https://baike.baidu.com/item/{item}'

  14. # 发送请求 获取响应

  15. rep = requests.get(url, headers=headers)

  16. # Xpath解析提取数据

  17. html = etree.HTML(rep.text)

  18. # 描述

  19. description = ''.join(html.xpath('/html/head/meta[4]/@content'))

  20. # 外文名

  21. en_name = ','.join(html.xpath('//dl[@class="basicInfo-block basicInfo-left"]/dd[2]/text()')).strip()

  22. # 中文简称 有的话 是在dd[3]标签下

  23. simple_name = ''.join(html.xpath('//dl[@class="basicInfo-block basicInfo-left"]/dd[3]/text()')).strip()

  24. sheet.append([item, simple_name, en_name, url])

  25. logging.info([item, simple_name, en_name, description, url])

  26.  
  27. except Exception as e:

  28. logging.info(e.args)

  29. pass

  30.  
  31. # 保存数据

  32. wb.save('成果.xlsx')

运行效果如下:

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

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

猜你喜欢

转载自blog.csdn.net/weixin_43881394/article/details/112360051