目前在自学python中,作此记录,欢迎交流。
此次练手对象为爬取中国大学排名内容并进行输出;总的思路如下:
1、选取一个网站,观察所需要的信息位置
网站链接:中国大学排名_高校排名_中国大学排行榜-中国教育在线
当前页面右键鼠标,选择查看源代码,观察所需内容位置:
可以看到内容保存在div标签下面,仔细观察发现前几年的也是在这个标签下面,只是位置不一样,此时这是静态网页,就可以用requests和BeautSoup进行处理了,要是在这里找不到所需内容,说明网站采取的是动态加载方法,以个人目前的水平来说,认为这两个库暂时处理不了,需要用到抓包技术,比如selenium库的自动化等;
2、使用request和BeautifulSoup进行解析,具体使用方法可以在站内进行学习,有很多可以学习的内容;在对初始数据进行整理处理,得到自己想要的数据和格式;
3、将数据进行输出或者保存到本地,可以使用CSV或者使用with打开文本进行保存
完整代码如下:
import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd
def geturl(url):#获取初始内容
headers = {自己的headers}
response = requests.get(url, headers=headers)
if response.status_code == 200:#一般都是200,headers具体看自己浏览器,在页面右击选择检查查看,也可以使用try-except进行防错
response.encoding=response.apparent_encoding#防止返回乱码
return response.text
else:
print("状态码不对:{}".format(response.status_code))
return None
def gettxt(html):#对内容进行分析整理并输出
soup = BeautifulSoup(html, 'html.parser')#对获取的内容进行标签整理
list1=[]
list2=[]
list3=[]
list4=[]
list5=[]#list1-list5均是临时使用,也可以不使用,只是放一块初学者容易乱,最终要返回的是list6
list6=[]
list1=soup.find_all('div',{'class':'u-body clearfix'})#观察源代码,看看信息放在哪个位置,第一个是标签名,第二个是值,具体可以查看该函数使用方法
list2=list1[0].find_all('tr')#要是获取前几年的,可以使用for循坏改变liat1[i]进行遍历获取
for i in list2:
list3.append(i.get_text())#把内容提取出来
for i in list3:
list4.append(i.replace('\n',' '))#把\n替换掉,要不然后面写入的就是一行一行写入,或者面板输出就是一行一行的输出,不美观,此时子列表为字符串
for i in list4:
list5.append(i.split(' '))#将子列表进一步转化为列表
for i in range(len(list5)):
list6.append(list(filter(lambda x:x !="", list5[i])))#去掉空字符
print(list6)#这是先看看符不符合自己要求
return list6
def main():
url="https://www.eol.cn/e_html/gk/dxpm/index.shtml"
t=geturl(url)
l=[]
l=gettxt(t)
a=pd.DataFrame(l)
a.to_csv("自己需要保存的文件地址")#这个函数可以设置列名,只不过我没设置
main()
有疑问或有交流想法的欢迎来指教讨论,大家互相学习
标签:headers,python,BeautifuSoup,list6,list5,import,requests,response,append From: https://blog.csdn.net/ldjdjdk/article/details/143856750