python - 网络抓取价格和手机名称?
问题描述
我是 python 的新学习者,我正在尝试从 Flipkart 中获取特定手机的名称和价格。
from requests import get
from bs4 import BeautifulSoup
import pandas as pd
name=[]
price=[]
rating=[]
url="https://www.flipkart.com/search?sid=tyy%2C4io&otracker=CLP_Filters&p%5B%5D=facets.ram%255B%255D%3D4%2BGB&p%5B%5D=facets.rating%255B%255D%3D4%25E2%2598%2585%2B%2526%2Babove"
results=requests.get(url)
soup=BeautifulSoup(results.text,"html.parser")
soup.prettify()
details=soup.find_all("div",attrs={"class":"bhgxx2 col-12-12"})
for mobiles in details:
mob_name=mobiles.find("div",attrs={"class":"_3wU53n"})
name.append(mob_name.text)
print(name)
输出:
文件“C:/Users/hp/Desktop/mobile scrapping.py”,第 30 行,在 name.append(mob_name.text)
AttributeError:“NoneType”对象没有属性“文本”
解决方案
请检查一下
import requests
from bs4 import BeautifulSoup
url="https://www.flipkart.com/search?sid=tyy%2C4io&otracker=CLP_Filters&p%5B%5D=facets.ram%255B%255D%3D4%2BGB&p%5B%5D=facets.rating%255B%255D%3D4%25E2%2598%2585%2B%2526%2Babove"
results=requests.get(url)
soup=BeautifulSoup(results.text,"html.parser")
mobiles=[]
rates=[]
details=soup.findAll("div",attrs={"class":"_3wU53n"})
for i in details:
mobiles.append(i.text)
prices=soup.findAll("div",attrs={"class":"_1vC4OE _2rQ-NK"})
for j in prices:
rates.append(j.text)
final=[[x,y] for x,y in zip(mobiles,rates)]
print(final)
输出:['Realme Narzo 10A (So White, 64 GB)', '₹9,999'], ['Realme Narzo 10 (That Blue, 128 GB)', '₹11,999']]
推荐阅读
- java - 我可以在不使用 Java 循环的情况下填充二维数组吗?
- python - Python pymler.asizeof.asizeof 为生成器表达式返回 0
- php - 从没有 ajax/jquery/javascript 的表单上传 Codeigniter 文件
- r - 为什么我不能从 github 安装包?
- php - CakePHP 3.6.x 中递归的替代方案
- powershell - powershell 在 foreach 循环之间插入文本
- mongoose - 猫鼬填充返回空
- python - 特殊序列有什么用,例如 python 中的 \number?
- ruby-on-rails - 如何在 Devise + Doorkeeper 中创建(注册/注册)用户
- mysql - 如何比较两个表中的数据并显示一个表中的数据