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))
时间: 2024-04-27 16:21:18 浏览: 131
这段代码是用Python编写的,主要功能是从指定的网页上获取HTML页面内容,并且使用BeautifulSoup库解析HTML页面,提取其中的所有超链接,并输出超链接的名称、地址和文本内容。如果获取HTML页面内容失败,则返回字符串"产生异常"。其中,if __name__ == 'main': 表示当这个.py文件被作为主程序运行时,才会执行下面的代码。
相关问题
显示TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。:import requests from bs4 import BeautifulSoup import pandas as pd # 要爬取的网址 url = 'https://price.pcauto.com.cn/top/sales/s1-t3-y2022-m12.html' response = requests.get(url) html = response.text soup = BeautifulSoup(html, 'html.parser') table = soup.find('div', {'class': 'table-wrap'}) data = [] for tr in table.find_all('tr'): row = [] for td in tr.find_all('td'): row.append(td.text.strip()) if row: data.append(row) columns = ['排名', '车型', '厂商指导价', '市场价', '累计销量', '月销量'] df = pd.DataFrame(data[1:], columns=columns) print(df)
这个错误提示显示是在进行 requests.get() 请求时出现了超时错误,可能是由于网络连接问题或者目标网站响应速度过慢导致的。
解决方法:
1. 检查网络连接是否正常,可以尝试使用其他网络或者使用浏览器访问该网址来确认是否可以正常访问。
2. 尝试增加请求超时时间,可以通过设置 requests.get() 函数的 timeout 参数来设置超时时间,例如 requests.get(url, timeout=10) 表示设置超时时间为 10 秒。
3. 如果目标网站响应速度过慢,可以尝试等待一段时间后再进行请求,或者更换其他网址进行爬取。
4. 如果以上方法均无效,可以尝试使用代理 IP 来进行请求,或者联系网站管理员寻求帮助。
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函数调用了以上三个函数,从而完成了爬取和输出的任务。
对于修改的部分,可以根据自己的需求进行修改。比如,如果你想爬取其他年份的大学排名信息,只需要修改URL即可;如果你想输出更多的大学信息,可以修改printUnivList函数中的 num 参数。如果你想将爬取到的信息保存到本地文件中,可以添加一个新的函数来实现。总之,这段代码具有很强的可扩展性,可以根据自己的需求进行修改。
阅读全文