网页抓取数据百度百科(、描述、简称学校名称.xlsx最终成果步骤及步骤)

优采云 发布时间: 2022-03-28 20:11

  网页抓取数据百度百科(、描述、简称学校名称.xlsx最终成果步骤及步骤)

  我在公众号上看到的文章感觉不错,适合练习。所以我自己做了。

  不要胡说八道。

  

  目的:手头有一个“学校名称.xlsx”表格。求这些学校的英文名称、描述、缩写

  

  学校名称.xlsx

  

  最后结果

  第 1 步:分析

  所需的学校信息一般可在百度百科中找到。那么让我们看看百度百科的数据能否满足我们的要求。

  一、找学校去百度百科看看情况

  以北京大学为例:英文名称、描述、缩写

  在该界面中可用。

  

  

  然后所有的信息也可以在页面源代码中看到。所以理论上,我们爬下这个页面的信息后,就可以做简单的处理了。

  

  第 2 步:编写代码

  1、需要的技术和软件包

  import requests

import pandas as pd

from random import choice

from lxml import etree

import openpyxl

import logging

from concurrent.futures import ThreadPoolExecutor

from time import sleep

from random import random

  阐明:

  请求,对于 python 爬虫来说是必须的。这用于发送get请求并接收返回结果

  pandas,数据分析的基础,是必须的。用于将 Excel 表中的学校名称用 pandas 读取后转换为列表,并成为百度百科网站的一部分。

  随机的,

  random 方法生成伪随机数。随时间使用。让程序随机休眠几秒,避免CPU一直被占用,导致电脑发热、死机,避免百度ip阻塞

  选择方法,随机一种。这用于随机选择一个 http 标头。

  lxml,用于解析网页返回数据(返回的数据是一堆网页代码,很多没用,还得解析成需要的英文名、缩写、描述)

  openpyxl,用于写表

  记录,记录

  concurrent.futures,Python 多线程。我们要爬3000条左右的数据,单线程执行会很慢,多线程会快很多

  时间,使用 sleep 方法让代码休眠。

  2、写一个爬取数据的函数

  def get_data(item):

try:

# 记录一下它原本的序号

sort_num = items.index(item)

# 随机生成请求头

headers = {

'User-Agent':choice(user_agent)

}

# 构造的url

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

# 发送请求 获取响应

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

sleep(random())

# 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, description, url, sort_num])

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

except Exception as e:

logging.info(e.args)

pass

  3、编写一个多线程函数,将爬取解析后的数据保存到文件中。

  # 函数调用 开多线程

def run():

with ThreadPoolExecutor(max_workers=5) as executor:

executor.map(get_data, items)

wb.save('成果.xlsx')

print('===================== 数据成功下载完成 ======================')

  阐明:

  地图(函数,可迭代,...)

  指定的序列将根据提供的函数进行映射。

  第一个参数函数使用参数序列中的每个元素调用函数函数,返回一个收录每个函数函数返回值的新列表。

  说白了就是map(a,b),a是函数,b是序列。将 b 一个一个传入 a 执行。有点循环。

  本例中的 b 是从表中获得的学校名称列表。大概有3000个左右,所以如果run()函数执行的话,要执行3000次

  4、执行多线程函数

  run()

  5、跑步效果(不做*敏*感*词*,所以这个*敏*感*词*是大佬图的复制品)

  

  6、终于得到一个result.xlsx文件

  阐明:

  上述代码需要复制到py文件中执行。

  以上分别拆解,主要是为了说明。

  最后:

  我感慨道:如果你不辜负年轻的时候,你将在你的余生中加倍欺骗你。

  以前上学的时候比较懒惰,基本没学过HTML相关的知识。现在看来元素定位太费劲了。

  最后:

  公众号好评如潮:师姐拿了成绩。xlsx对男友说:“你看,舔狗还是好用的”

  参考:

  xpath元素定位(相对路径)常用的5种方法 - 程序员大本营

  原作者应该是叶廷云 叶廷云的博客

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线