def getHTMLText(url): 7 try: 8 r = requests.get(url, timeout = 30) 9 r.raise_for_status() 10 r.encoding = r.apparent_encoding 11 return r.text 12 except: 13 return '爬取失败'
时间: 2024-02-14 13:23:47 浏览: 134
这是一个Python爬虫程序,函数名为getHTMLText,其输入参数为url,函数的作用是爬取指定url对应网页的HTML文本,并返回该文本内容。该程序使用了requests库中的get方法,设置了超时时间为30秒,并对请求返回的状态码进行了检查。如果请求成功,就将网页内容编码格式设置为自动检测,并返回文本内容;如果请求失败,就返回字符串“爬取失败”。
相关问题
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(num): url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html' html = getHTMLText(url) soup = BeautifulSoup(html,"html.parser") fillUnivList(soup) printUnivList(num) main(10)运行有错
根据您提供的代码,出错可能是因为网站的地址已经更新,代码中的网址已经无法访问。您可以将代码中的网址改为以下地址,再试一下:
```python
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html'
```
此外,您在代码中定义了 `allUniv` 列表,但是在 `fillUnivList` 方法中的 `allUniv` 未使用 `global` 关键字声明为全局变量,导致无法修改该变量。您可以将 `fillUnivList` 方法中第一行的 `allUniv` 改为 `global allUniv`,来修复这个问题。
最后,如果还存在其他错误,可以将错误信息发给我,我会帮您解答。
def get_html(url,head): try: #**********FOUND********** r=requests.get(url,head=head,timeout=10) #正确如下# r=requests.get(url, headers=head, timeout=10) #**********FOUND********* r.status_code #正确如下# r.raise_for_status() #**********FOUND********** r.encoding=utf-8 #正确如下# r.encoding='utf-8' return r.text except:
这段代码的作用是从指定的 URL 中获取 HTML 页面的文本内容,使用指定的请求头。如果请求成功,返回获取到的 HTML 文本内容;如果请求失败,抛出异常。
其中,函数定义的参数有两个:
- `url`:需要获取 HTML 页面的 URL;
- `head`:一个包含请求头信息的字典。
函数主体部分的代码解释:
- `requests.get(url, head=head, timeout=10)` 发起 GET 请求,使用传入的 `head` 参数作为请求头,设置超时时间为 10 秒,并将返回的响应对象保存在变量 `r` 中;
- `r.status_code` 返回 HTTP 状态码;
- `r.raise_for_status()` 如果 HTTP 请求不成功(状态码不是 200),则抛出异常;
- `r.encoding=utf-8` 设置响应内容的编码为 utf-8;
- `return r.text` 返回响应内容的文本部分。
需要注意的是,代码中有几处错误:
- `head` 应该改为 `headers`;
- `r.encoding=utf-8` 应该改为 `r.encoding='utf-8'`;
- 函数的代码缺少缩进,需要进行修改。
阅读全文