from bs4 import BeautifulSoup import requests import openpyxl def get_html(url): try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: r='fail' return r def get_contents(urlist,rurl): soup=BeautifulSoup(rurl,'html.parser') trs=soup.find_all('tr') for tr in trs: un=[] for td in tr: ts=td.string ts=ts.strip() if ts == '': continue un.append(ts) urlist.append(un) def saveList(urlist): wb=openpyxl.Workbook() ws=wb.active r=1 for line in urlist: for col in range(1,len(line)+1): ws.cell(row=r,column=col).value=line[col-1] r=r+1 wb.save('University.xlsx') if __name__=="__main__": urlist=[] url="http://heucice.hrbeu.edu.cn/4017/list.htm" rurl=get_html(url) get_contents(urlist,rurl) saveList(urlist)
时间: 2024-04-28 17:20:14 浏览: 134
这段代码是一个简单的爬虫程序,用于爬取哈尔滨工程大学(HRBEU)信息与通信工程学院的本科教学网站上的“本科生教学管理”栏目下的“本科生教学管理办公室”页面中的表格内容,并将其保存到一个名为“University.xlsx”的 Excel 文件中。
在程序中,get_html() 函数用于获取网页的 HTML 内容,get_contents() 函数用于解析 HTML 内容,提取表格中的数据,并将其存储到一个列表中,saveList() 函数用于将列表中的数据保存到 Excel 文件中。
在程序的主函数中,首先定义了一个列表 urlist,用于存储表格中的数据。然后,定义了一个变量 url,用于存储目标页面的 URL 地址。接着,调用 get_html() 函数获取目标页面的 HTML 内容,并将其传递给 get_contents() 函数进行解析。最后,将解析后的数据传递给 saveList() 函数,将其保存到 Excel 文件中。
需要注意的是,爬取网页内容时需要遵守相关的法律法规和网站的规定,避免对目标网站造成不必要的影响。
相关问题
import requests from bs4 import BeautifulSoup allUniv = [] def getHTMLText(url): try: r = requests.get(url, timeout=30) r.raise_for_status() r.encoding = 'utf-8' return r.text except: return "" def fillUnivList(soup): data = soup.find_all('tr') for tr in data: ltd = tr.find_all('td') if len(ltd)==0: continue singleUniv = [] for td in ltd: singleUniv.append(td.string) allUniv.append(singleUniv) def printUnivList(num): print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","学校名称","省市","总分","培养规模")) for i in range(num): u=allUniv[i] print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(u[0],u[1],u[2],u[3],u[6])) def main(): url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html' html = getHTMLText(url) soup = BeautifulSoup(html, "html.parser") fillUnivList(soup) printUnivList(10) main()
这段代码是用来爬取2016年全国大学排名前10的大学的信息,并输出到控制台上。代码首先定义了一个空列表 allUniv,然后定义了三个函数:getHTMLText、fillUnivList、printUnivList。其中,getHTMLText函数用来获取指定URL的HTML文本内容,fillUnivList函数用来解析HTML文本内容并将排名前10大学的信息保存到 allUniv 列表中,printUnivList函数用来将 allUniv 列表中的信息输出到控制台上。最后,main函数调用了以上三个函数,从而完成了爬取和输出的任务。
import requests from bs4 import BeautifulSoup def getHTMLText(url): try: r = requests.get(url,timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "产生异常" def jiexi(html_doc): soup = BeautifulSoup(html_doc,"html.parser") links = soup.find_all('a') for link in links: print(link.name,link["nref"],link.get.next()) if __name__ == 'main': url = "https://wallhaven.cc/toplist?page=7" print(getHTMLText(url))改进代码
这段代码可以改进的地方有:
1. 函数名jiexi不太直观,可以改为更明确的parse_links。
2. 在解析链接时,可以加上判断,如果链接是以http或https开头的,才输出链接信息,否则忽略。
3. 在主程序中,应该调用parse_links函数,而不是直接打印HTML页面内容。
改进后的代码如下:
```
import requests
from bs4 import BeautifulSoup
def get_html_text(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
def parse_links(html_doc):
soup = BeautifulSoup(html_doc, "html.parser")
links = soup.find_all('a')
for link in links:
if link.has_attr('href') and (link['href'].startswith('http') or link['href'].startswith('https')):
print(link.name, link['href'], link.get_text())
if __name__ == '__main__':
url = "https://wallhaven.cc/toplist?page=7"
html_text = get_html_text(url)
parse_links(html_text)
```
这样修改后,代码更加清晰易懂,功能也更加完善。
阅读全文