info = info_1.find_all(“p”, attrs={“data-page”: “0”}).get_text()爆出警告Unresolved attribute reference 'get_text' for class 'ResultSet'怎么修改
时间: 2024-09-28 17:10:47 浏览: 40
该警告提示你在`info_1.find_all("p", attrs={"data-page": "0"})`这行代码中尝试对`ResultSet`类型的`find_all()`结果应用`get_text()`方法,但实际上`ResultSet`不是一个可以直接获取文本内容的对象。在BeautifulSoup中,`find_all()`返回的是一个包含所有匹配元素的列表,而不是单个元素。
为了提取每个找到的`<p>`标签内的文本,你需要遍历这个列表并调用每个元素的`text`属性。下面是修正后的代码:
```python
info = [element.get_text() for element in info_1.find_all("p", attrs={"data-page": "0"})]
```
这样就将每个元素转换成字符串,并保存到`info`列表中,消除了之前的警告。如果你需要移除换行符等空白字符,还可以添加一行:
```python
info = [element.text.strip() for element in info_1.find_all("p", attrs={"data-page": "0"})]
```
相关问题
请详细解释以下代码并给每行代码添加注释:#导入requests库 import requests #导入beautifulsoup库 from bs4 import BeautifulSoup import codecs #目标url URL = "https://movie.douban.com/top250" #请求头 HEADERS = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'} def download_page(url): data = requests.get(url, headers=HEADERS).content return data def parse_html(html): soup = BeautifulSoup(html, 'html.parser') # 测试时可以使用print soup.prettify()打印查看获得的页面 # 根据css获取页面信息 movie_list_ol = soup.find('ol', attrs={'class':'grid_view'}) movie_name_list = [] # 遍历页面中有关的信息 for movie_li in movie_list_ol.find_all('li'): # 电影描述 detail = movie_li.find('div', attrs={'class':'hd'}) # 电影名字 movie_name = detail.find('span', attrs={'class':'title'}).getText() movie_name_list.append(movie_name) # 找到下一页 next_page = soup.find('span', attrs={'class':'next'}).find('a') if next_page: # 拼接下一页的url,继续爬取下一页 return movie_name_list, URL + next_page['href'] return movie_name_list, None def main(): url = URL with codecs.open('movies.txt', 'w', encoding='utf-8') as fp: movies_all = [] while url: html = download_page(url) movies, url = parse_html(html) movies_all.extend(movies) for index, movie in enumerate(movies_all): index += 1 # 将获得的信息写入文件 fp.write('{index}.{movie}\n'.format(index=index, movie=movie)) if __name__ == '__main__': main() print('爬取成功')
```
#导入requests库
import requests
#导入beautifulsoup库
from bs4 import BeautifulSoup
import codecs
#目标url
URL = "https://movie.douban.com/top250"
#请求头
HEADERS = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
#定义一个函数,用于下载页面
def download_page(url):
#发送请求,获取响应内容
data = requests.get(url, headers=HEADERS).content
return data
#定义一个函数,用于解析页面
def parse_html(html):
#使用BeautifulSoup库解析HTML页面
soup = BeautifulSoup(html, 'html.parser')
#测试时可以使用print soup.prettify()打印查看获得的页面
#根据css获取页面信息
movie_list_ol = soup.find('ol', attrs={'class':'grid_view'})
movie_name_list = []
#遍历页面中有关的信息
for movie_li in movie_list_ol.find_all('li'):
#电影描述
detail = movie_li.find('div', attrs={'class':'hd'})
#电影名字
movie_name = detail.find('span', attrs={'class':'title'}).getText()
movie_name_list.append(movie_name)
#找到下一页
next_page = soup.find('span', attrs={'class':'next'}).find('a')
if next_page:
#拼接下一页的url,继续爬取下一页
return movie_name_list, URL + next_page['href']
return movie_name_list, None
#定义一个主函数,用于执行程序
def main():
url = URL
#使用codecs库打开文件
with codecs.open('movies.txt', 'w', encoding='utf-8') as fp:
movies_all = []
while url:
#下载页面
html = download_page(url)
#解析页面
movies, url = parse_html(html)
movies_all.extend(movies)
#将爬取到的电影名字写入文件
for index, movie in enumerate(movies_all):
index += 1
fp.write('{index}.{movie}\n'.format(index=index, movie=movie))
#程序入口
if __name__ == '__main__':
#执行主函数
main()
#输出爬取成功
print('爬取成功')
```
这段代码实现了从豆瓣电影Top250页面中爬取电影名字的功能,具体的实现步骤如下:
1. 导入requests库和beautifulsoup库,以及codecs库。
2. 定义目标URL和请求头。
3. 定义download_page函数,用于下载页面。
4. 定义parse_html函数,用于解析页面,获取电影名字。
5. 定义main函数,用于执行程序。在main函数中,首先使用codecs库打开一个文件,然后循环爬取Top250页面中的电影名字,将其写入文件中。
6. 在程序入口处,执行main函数,并输出“爬取成功”提示信息。
import requests from bs4 import BeautifulSoup import pandas as pd #定义链接 url="https://price.pcauto.com.cn/top/sales/s1-t1.html" #定义请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36' } #获取网页源码 html = requests.get(url=url,headers=headers) #将网页源码装换为txt main_page = html.text #使用bs4对网页源码进行解析 main_page = BeautifulSoup(main_page,"html.parser") #定位table table = main_page.find("div", attrs={"class": "level-table"}) #获取所有table里头的tr标签 trs = table.find_all("tr") #定义数据容器 data = [] #遍历所有 tr标签 for i in trs[1:]: #定义零时容器 list = [] #定位tr里头的所有td标签 tds = i.find_all("td") #遍历所有td标签 for td in tds: #将td里头的文本添加到零时容器 list.append(td.text) #将零时容器内的数据添加值data里头 data.append(list) #定义储存标题 columns=["销量排名","车系","官方价","从属品牌","9月销量","1-10月累计销量"] #使用pandas 储存 #定义个dataframe df = pd.DataFrame(columns=columns, data=data) #使用csv格式储存 df.to_csv("./Data.csv", encoding='utf-8', index=False) #保存完毕 print("保存完毕")
这代码是一个简单的爬虫,用来爬取汽车之家的车型销量排行榜,并将数据保存为CSV文件。具体来说,代码首先使用requests库向目标网页发送HTTP请求,获取网页源码;然后使用BeautifulSoup库对网页源码进行解析,定位到销量排行榜所在的table,并获取其中的tr标签;接着遍历每个tr标签,将其中的td标签的文本内容添加到一个临时容器中,最后将所有数据存储到一个二维列表中;最后使用pandas库将数据转换为DataFrame格式,并将其保存为CSV文件。
需要注意的是,这段代码中使用了一些第三方库,包括requests、bs4和pandas。在运行代码前,需要先安装这些库,并且需要了解基本的HTTP请求和HTML页面解析知识。同时,爬取网页数据也需要注意法律法规和道德规范,不要用于非法用途。
阅读全文