【发布时间】:2020-01-14 07:03:05
【问题描述】:
试图从网站获取数据,但获取了一些 url 的两个数据
本田思域
make = honda
model = civic
路虎
make = land
model = rover
应该在哪里
make = landrover
model = rangerover
试过这个:
scala.txt:
https://www.redbook.com.au/cars/details/2019-honda-civic-50-years-edition-auto-my19/SPOT-ITM-524208
https://www.redbook.com.au/cars/details/2019-holden-astra-rs-black-edition-bk-auto-my19/SPOT-ITM-524534
http://www.redbook.com.au/cars/research/used/details/2014-land-rover-range-rover-evoque-ed4-pure-tech-manual-my15/SPOT-ITM-410126
http://www.redbook.com.au/cars/research/used/details/2014-land-rover-range-rover-evoque-sd4-pure-tech-auto-4x4-my15/SPOT-ITM-410136
import lxml.html as lh
import pandas as pd
import html
from lxml import html
from bs4 import BeautifulSoup
import requests
import requests
from bs4 import BeautifulSoup as bs
cars = []
with open('scala.txt') as f:
urls = f.read().splitlines()
for url in urls:
car_data={}
headers = {'User-Agent':'Mozilla/5.0'}
page = (requests.get(url, headers=headers))
tree = html.fromstring(page.content)
car_data['url']=url
if tree.xpath('//h1[@class="details-title"]/text()')[0]:
full_car_name = tree.xpath('//h1[@class="details-title"]/text()')[0]
car_data['naming'] = full_car_name
print(full_car_name)
car_data['id'] = url.split("SPOT-ITM-")[1].replace("/", "")
car_data['year'] = full_car_name.split(" ")[0]
car_data['make'] = full_car_name.split(" ")[1]
car_data['model']= full_car_name.split(" ")[2]
cars.append(car_data)
前两个没问题,当第三个 url 出现时是多个值
输出:
{'id': '524208',
'make': 'Honda',
'model': 'Civic',
'naming': '2019 Honda Civic 50 Years Edition Auto MY19',
'url': 'https://www.redbook.com.au/cars/details/2019-honda-civic-50-years-edition-auto-my19/SPOT-ITM-524208',
'year': '2019'}
{'id': '410136',
'make': 'Land',
'model': 'Rover',
'naming': '2014 Land Rover Range Rover Evoque SD4 Pure Tech Auto 4x4 MY15',
'url': 'http://www.redbook.com.au/cars/research/used/details/2014-land-rover-range-rover-evoque-sd4-pure-tech-auto-4x4-my15/SPOT-ITM-410136',
'year': '2014'}
对于路虎,make should be land rover 和 model should be range rover
【问题讨论】:
-
请编辑您的帖子以包含完整的
traceback -
@buran 添加了回溯
-
第三个链接没有图片。你需要处理这种情况,例如使用 try/except
-
@buran 如果我运行 100 个 url,我的索引超出了范围,但是如果我运行一小串,为什么没有超出范围的索引?
-
当您尝试解析不存在的元素时,您的索引超出范围。例如在这种情况下,您尝试获取图像 href,但在第三个 url 中没有图像。如果年份、品牌或型号信息不存在,您将面临同样的风险。您是否会在一堆 url 上收到错误取决于那里的信息。如果你幸运的话,你要找的所有信息都会在那里,但情况并非总是如此。
标签: python selenium beautifulsoup python-requests lxml