【发布时间】:2015-04-22 23:50:00
【问题描述】:
from collections import defaultdict
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd
r= requests.get("http://www.walmart.com/search/?query=marvel&cat_id=4096_530598")
r.content
soup = BeautifulSoup(r.content)
g_data = soup.find_all("div", {"class" : "tile-content"})
data=defaultdict(list)
for tile in g_data:
#the "tile" value in g_data contains what you are looking for...
#find the product titles
try:
title = tile.find("a","js-product-title")
data['Product Title'].append(title.text)
except:
data['Product Title'].append("")
#find the prices
try:
price = tile.find('span', 'price price-display').text.strip()
data['Price'].append(price)
except:
data['Price'].append("")
#find the stars
try:
g_star = tile.find("div",{"class" : "stars stars-small tile-row"}).find('span','visuallyhidden').text.strip()
data['Stars'].append(g_star)
except:
data['Stars'].append("")
try:
dd_starring = tile.find('dd', {"class" : "media-details-multi-line media-details-artist-dd module"}).text.strip()
data['Starring'].append(dd_starring)
except:
data['Starring'].append("")
try:
running_time = tile.find_all('dl',{"class" : "media-details dl-horizontal copy-mini"})
for dd_run in running_time :
running = dd_run.find_all('dd')[1:2]
for run in running :
#print run.text.strip()
data['Running Time'].append(run.text.strip())
except:
data['Running Time'].append("")
try:
dd_format = tile.findAll('dd',{"class" :"media-details-multi-line"})[1:2]
for formatt in dd_format:
data['Format'].append(textOfFormat)
except:
data['Format'].append("")
try:
div_shipping =tile.find_all('div',{"data-offer-shipping-pass-eligible":"false"})
data['Shipping'].append("")
except:
freeshipping = "Free Shipping"
data['Shipping'].append(freeshipping)
df = pd.DataFrame(data)
df
我想访问
如果没有类名。如何访问它?就像第11行有5个
导演字段和其他很少有 发布日期。目前我正在使用 [2:1] 等访问它。但它不是灵活的,也不能正确填充我的表。
有什么功能可以做到这一点吗?
【问题讨论】:
-
很难理解您的描述。您能否说明您要访问哪些字段? “跑步时间”还是“明星”?
-
我想访问所有我在运行时获得演员姓名,有时在格式中获得演员姓名。我已将检查元素 html 代码添加为图像。所以
- 127 分钟
没有类名。所以我知道除了使用 id 和类名来访问它之外,我没有其他方法,我让代码只查看第 1 个和第 2 个- 元素.如果添加了导演的
- ,则运行时间的
- 标签会下降,并且表中的数据会填充演员..
标签: python html pandas beautifulsoup dataframe