import requests from bs4 import BeautifulSoup import pandas as pd url = 'https://www.shanghairanking.cn/institution' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} data_list = [] for i in range(1, 6): params = { 'type': '0', 'page': str(i), 'num': '20', 'sort': 'sort_xw' } response = requests.get(url, headers=headers, params=params) soup = BeautifulSoup(response.text, 'html.parser') table = soup.find('table', class_='rk-table') tbody = table.find('tbody') tr_list = tbody.find_all('tr') for tr in tr_list: td_list = tr.find_all('td') name = td_list[0].text.strip() region = td_list[1].text.strip() manage = td_list[2].text.strip() category = td_list[3].text.strip() double_first_class = td_list[4].text.strip() data_list.append([name, region, manage, category, double_first_class]) df = pd.DataFrame(data_list, columns=['校名', '地区', '管理部门', '类别', '双一流']) df.to_csv('shanghairanking.csv', index=False, encoding='utf-8-sig') print('数据已保存到shanghairanking.csv文件中!')报错tbody = table.find('tbody') AttributeError: 'NoneType' object has no attribute 'find'怎么解决
时间: 2024-01-11 18:03:34 浏览: 24
这个错误通常是由于 BeautifulSoup 没有找到目标元素导致的。在这个代码中,出现这个错误的原因可能是因为 BeautifulSoup 没有找到 class 为 'rk-table' 的 table 元素。你可以在代码中增加一个判断语句来避免这个错误:
```
table = soup.find('table', class_='rk-table')
if table is None:
continue
```
这样,如果 BeautifulSoup 没有找到目标元素,就会跳过本次循环,继续执行下一次循环。这个修改可以在 for 循环内部的第一行加入。
相关问题
抓取以下目标网站的信息:https://www.shanghairanking.cn/institution
好的,以下是一个简单的Python爬虫代码,可以抓取上海交通大学、清华大学和北京大学在上海排名和全球排名的信息:
```python
import requests
from bs4 import BeautifulSoup
url = 'https://www.shanghairanking.cn/institution/shanghai-tech-university'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取上海科技大学在上海排名和全球排名
shanghai_rank = soup.select_one('.rank').text
global_rank = soup.select_one('.rank-world').text
print('上海科技大学在上海排名:', shanghai_rank)
print('上海科技大学全球排名:', global_rank)
url = 'https://www.shanghairanking.cn/institution/tsinghua-university'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取清华大学在上海排名和全球排名
shanghai_rank = soup.select_one('.rank').text
global_rank = soup.select_one('.rank-world').text
print('清华大学在上海排名:', shanghai_rank)
print('清华大学全球排名:', global_rank)
url = 'https://www.shanghairanking.cn/institution/peking-university'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取北京大学在上海排名和全球排名
shanghai_rank = soup.select_one('.rank').text
global_rank = soup.select_one('.rank-world').text
print('北京大学在上海排名:', shanghai_rank)
print('北京大学全球排名:', global_rank)
```
这个代码使用了requests库和BeautifulSoup库来获取网页内容和解析HTML文档。其中,我们通过调用soup.select_one()方法来选择相应的HTML元素,并获取其文本内容。运行代码后,输出结果应该是类似于:
```
上海科技大学在上海排名: 11
上海科技大学全球排名: 301-400
清华大学在上海排名: 3
清华大学全球排名: 23
北京大学在上海排名: 4
北京大学全球排名: 24
```
以下代码爬取的内容是乱码,什么原因?from bs4 import BeautifulSoup import requests if name == 'main': url = 'https://www.pincai.com/article/2320333.htm' response = requests.get(url).text soup = BeautifulSoup(response, 'lxml')。帮我修改好代码
以下是修改后的代码:
```python
from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':
url = 'https://www.pincai.com/article/2320333.htm'
response = requests.get(url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'lxml')
# 在这里可以继续处理网页内容
```
对于乱码问题,我在代码中添加了 `response.encoding = 'utf-8'` 来指定网页的编码为UTF-8,以确保正确解析网页内容。另外,我将 `response.text` 传递给 `BeautifulSoup` 来处理,以获取正确的解析结果。
现在你可以继续处理 `soup` 对象中的网页内容了。如果还有其他问题,请随时提问。