【发布时间】:2019-06-23 12:55:15
【问题描述】:
我是 Python 新手,仍然不了解它的所有内容及其功能,但我正在接近我想要实现的目标。
基本上我有程序从网站上抓取我想要的数据,但是当它从“specs”字符串中打印选定的单词/项目时,它也会从字符串中打印 [ ] 和 '' 等字符。
示例是我试图从 li 列表中获取“齿轮箱”类型、“燃料”类型和“里程”,我已将其转换为带有工厂的字符串,然后从中选择特定项目细绳。
我现在的程序是这样的:
['手动']['汽油']['86,863英里']
我想要实现的是这样的打印结果:
手动,汽油,86,863 英里
当导出到我的 .csv 中的单独列时,应显示在相应标题下的正确列中。
我已尝试 .text 仅删除文本,但它显示为 'list' object has no attribute 'text' 错误。
import csv
import requests
from bs4 import BeautifulSoup
outfile = open('pistonheads.csv','w', newline='')
writer = csv.writer(outfile)
writer.writerow(["Link", "Make", "Model", "Price", "Image Link",
"Gearbox", "Fuel", "Mileage"])
url = 'https://www.pistonheads.com/classifieds?Category=used- cars&Page=1&ResultsPerPage=100'
get_url = requests.get(url)
get_text = get_url.text
soup = BeautifulSoup(get_text, 'html.parser')
car_link = soup.find_all('div', 'listing-headline', 'price')
for div in car_link:
links = div.findAll('a')
for a in links:
link = ("https://www.pistonheads.com" + a['href'])
make = (a['href'].split('/')[-4])
model = (a['href'].split('/')[-3])
price = a.find('span').text.rstrip()
image_link = a.parent.parent.find('img')['src']
image = ("https:") + image_link
vehicle_details = a.parent.parent.find('ul', class_='specs')
specs = list(vehicle_details.stripped_strings)
gearbox = specs[3:]
fuel = specs[1:2]
mileage = specs[0:1]
writer.writerow([link, make, model, price, image, gearbox, fuel, mileage])
print(link, make, model, price, image, gearbox, fuel, mileage)
outfile.close()
【问题讨论】:
-
当你操作的时候,specs变成了一个list对象,然后你使用了list specs的切片,显然结果仍然是list..
标签: python beautifulsoup screen-scraping