查看源碼,觀察html結構
# -*- coding: utf-8 -*- from lxml.html import parse from urllib.request import urlopen import pandas as pd # 可能爬的這個網頁比較特殊,需要寫下面兩句話 import ssl ssl._create_default_https_context = ssl._create_unverified_context # 根據鏈接獲得整個html放到doc中 parsed = parse(urlopen('https://info.zufe.edu.cn/xygk/szdw.htm')) doc = parsed.getroot() #讀取html中的table # 用列表來存老師名字 all_teachers=[] # 用字典保存主頁鏈接 link_dic={} # 用字典保存職稱 zhicheng={} # 找到html中有<table></table>的所有table,以列表的形式返回給tables tables = doc.findall('.//table') # 我們要的是第一個table content=tables[0].text_content() tds = tables[0].findall('.//td') # 一條條遍歷所有td里的內容 for td in tds: # 判斷當前屬於哪個職稱,再給zc賦值 zhi=td.findall('.//strong') if len(zhi)!=0: print(zhi[0].text_content()) zc=zhi[0].text_content() print(td.text_content()) link=td.findall('.//a') if len(link)!=0: print("link",link[0].get('href')) # td.text_content()存的就是姓名 # 保存鏈接 link_dic[td.text_content()]=link[0].get('href') # 保存老師姓名 all_teachers.append(str(td.text_content())) # 保存職稱 zhicheng[td.text_content()]=zc print("張 帥的主頁鏈接是:",link_dic["張 帥"]) print("張 帥的職稱鏈接是:",zhicheng["張 帥"]) # 后面的各系不屬於老師去掉 all_teachers=all_teachers[:68] #姓名,職稱,主頁鏈接整理成dataframe dataframe={"姓名":[], "職稱":[], "主頁鏈接":[]} for teacher in all_teachers: dataframe["姓名"].append(teacher) dataframe["職稱"].append(zhicheng[teacher]) dataframe["主頁鏈接"].append(link_dic[teacher]) dataframe=pd.DataFrame(dataframe) print(dataframe)