來源:凹凸資料
專案來源:
漂亮學姐因為作業需要,得根據已有的學校名單,采集它們的英文名稱,描述,簡稱有的話也帶上,共有 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://www.uj5u.com/houduan/246181.html
標籤:python
上一篇:python爬蟲及資料可視化分析
