Python 无法以某种自定义方式安排已删除的内容

Python 无法以某种自定义方式安排已删除的内容,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,我正试图把车、模型和负载从车上刮下来。我写的脚本可以完美地解析它们。然而,我不能做的是以定制的方式安排它们 我试过: import requests from bs4 import BeautifulSoup r = requests.get("https://www.fjordsen.com/en-eu/vehicles/") soup = BeautifulSoup(r.text,"lxml") for items in soup.select(&q

我正试图把车、模型和负载从车上刮下来。我写的脚本可以完美地解析它们。然而,我不能做的是以定制的方式安排它们

我试过:

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    item_content = [item.text for item in items.select("td")[2:]]
    print(item_title,item_content)
此时脚本生成的输出:

Audi ['A1', '75kg✓', 'A3', '75kg✓', 'A4', '90kg✓', 'A5', '90kg✓', 'A6', '100kg✓', 'A7', '100kg✓', 'A8', '100kg✓', 'Q2', '75kg✓', 'Q3', '75kg✓', 'Q5', '75kg✓', 'Q7', '75kg✓', 'Q8', '100kg✓']
BMW ['1Serie', '75kg✓', '2SerieActiveTourer', '75kg✓', '2SerieCabrio', '0kg', '2SerieCoupe', '75kg✓', '2SerieGrandCoupe', '75kg✓', '2SerieGrandTourer', '75kg✓', '3Serie', '75kg✓', '3SerieGranTurismo', '75kg✓', '3SerieTouring', '75kg✓', '4SerieCabrio', '0kg', '4SerieCoupe', '75kg✓', '4SerieGranCoupe', '75kg✓', '5Serie', '100kg✓', '5SerieTouring', '100kg✓', '6SerieGranTurismo', '100kg✓', '7Serie', '100kg✓', '8Serie', '75kg✓', '8SerieCabrio', '0kg', '8SerieGranCoupe', '75kg✓', 'i3', 'Checkinstructionmanualforyourcar', 'i8', 'Checkinstructionmanualforyourcar', 'i8Roadster', 'Checkinstructionmanualforyourcar', 'X1', '75kg✓', 'X2', '75kg✓', 'X3', '100kg✓', 'X4', '100kg✓', 'X5', '100kg✓', 'X6', '100kg✓', 'X7', '100kg✓', 'Z4', 'Checkinstructionmanualforyourcar']
我希望获得的输出显示前几个:

Audi A1 75kg
Audi A3 75kg
Audi A4 90kg
Audi A5 90kg
Audi A6 100kg
如何使脚本生成与第二个类似的输出?

您可以使用内置的zip函数

例如:

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    item_content = [item.text for item in items.select("td")[2:]]
    for t, w in zip(item_content[::2], item_content[1::2]):
        print(item_title, t, w)  # or print(item_title, t, w.split()[0]) without the `✓` sign
印刷品:

Audi A1 75kg  ✓
Audi A3 75kg  ✓
Audi A4 90kg  ✓
Audi A5 90kg  ✓
Audi A6 100kg  ✓
Audi A7 100kg  ✓
Audi A8 100kg  ✓
Audi Q2 75kg  ✓
Audi Q3 75kg  ✓
Audi Q5 75kg  ✓
Audi Q7 75kg  ✓
Audi Q8 100kg  ✓
BMW 1 Serie 75kg  ✓
BMW 2 Serie Active Tourer 75kg  ✓
BMW 2 Serie Cabrio 0kg
BMW 2 Serie Coupe 75kg  ✓
BMW 2 Serie Grand Coupe 75kg  ✓

...and so on.
uwtd电视台编辑:

item_content[::2] = starts on index 0 and take 2 jumps to next model

item_content[1::2] = starts in index 1 and take 2 jumps to next load
您可以使用内置的zip函数

例如:

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    item_content = [item.text for item in items.select("td")[2:]]
    for t, w in zip(item_content[::2], item_content[1::2]):
        print(item_title, t, w)  # or print(item_title, t, w.split()[0]) without the `✓` sign
印刷品:

Audi A1 75kg  ✓
Audi A3 75kg  ✓
Audi A4 90kg  ✓
Audi A5 90kg  ✓
Audi A6 100kg  ✓
Audi A7 100kg  ✓
Audi A8 100kg  ✓
Audi Q2 75kg  ✓
Audi Q3 75kg  ✓
Audi Q5 75kg  ✓
Audi Q7 75kg  ✓
Audi Q8 100kg  ✓
BMW 1 Serie 75kg  ✓
BMW 2 Serie Active Tourer 75kg  ✓
BMW 2 Serie Cabrio 0kg
BMW 2 Serie Coupe 75kg  ✓
BMW 2 Serie Grand Coupe 75kg  ✓

...and so on.
uwtd电视台编辑:

item_content[::2] = starts on index 0 and take 2 jumps to next model

item_content[1::2] = starts in index 1 and take 2 jumps to next load

以下是实现相同输出的另一种方法:

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    for elem in items.select("tr"):
        model,weight = [item.text for item in elem.select("td")]
        print(item_title,model,weight)
输出如下:

Audi Model Maximum roof load while driving
Audi A1 75kg  ✓
Audi A3 75kg  ✓
Audi A4 90kg  ✓
Audi A5 90kg  ✓
Audi A6 100kg  ✓
Audi A7 100kg  ✓
Audi A8 100kg  ✓
Audi Q2 75kg  ✓
Audi Q3 75kg  ✓
Audi Q5 75kg  ✓
Audi Q7 75kg  ✓
Audi Q8 100kg  ✓
BMW Model Maximum roof load
BMW 1 Serie 75kg  ✓
BMW 2 Serie Active Tourer 75kg  ✓

以下是实现相同输出的另一种方法:

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    for elem in items.select("tr"):
        model,weight = [item.text for item in elem.select("td")]
        print(item_title,model,weight)
输出如下:

Audi Model Maximum roof load while driving
Audi A1 75kg  ✓
Audi A3 75kg  ✓
Audi A4 90kg  ✓
Audi A5 90kg  ✓
Audi A6 100kg  ✓
Audi A7 100kg  ✓
Audi A8 100kg  ✓
Audi Q2 75kg  ✓
Audi Q3 75kg  ✓
Audi Q5 75kg  ✓
Audi Q7 75kg  ✓
Audi Q8 100kg  ✓
BMW Model Maximum roof load
BMW 1 Serie 75kg  ✓
BMW 2 Serie Active Tourer 75kg  ✓

您有两个很好的答案,但如果您想使用小补丁运行代码,请尝试以下方法:

import requests
from bs4 import BeautifulSoup
allcars = []
r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    item_content = [item.text for item in items.select("td")[2:]]
    cars = ([f'{str(item_title)} {m} {l.split(" ")[0]} ' for m, l in zip(item_content[0::2], item_content[1::2])])
    allcars.append(cars)
    for car in cars:
        print(car)
输出:

Audi A1 75kg 
Audi A3 75kg 
Audi A4 90kg 
Audi A5 90kg 
Audi A6 100kg 
Audi A7 100kg 
Audi A8 100kg 
Audi Q2 75kg 
Audi Q3 75kg 
Audi Q5 75kg...
这段代码列出了两个所有的车和一个其他的车,并在车之间循环。allcars包含汽车制造商、模式和负载的列表:

[['Audi A1 75kg ', 'Audi A3 75kg ', 'Audi A4 90kg ', 'Audi A5 90kg ', 'Audi A6 100kg ', 'Audi A7 100kg ', 'Audi A8 100kg ', 'Audi Q2 75kg ', 'Audi Q3 75kg ', 'Audi Q5 75kg ', 'Audi Q7 75kg ', 'Audi Q8 100kg '], ['BMW 1 Serie 75kg ', 'BMW 2 Serie Active Tourer 75kg ', 'BMW 2 Serie Cabrio 0kg....

您有两个很好的答案,但如果您想使用小补丁运行代码,请尝试以下方法:

import requests
from bs4 import BeautifulSoup
allcars = []
r = requests.get("https://www.fjordsen.com/en-eu/vehicles/")
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".card-default"):
    item_title = items.select_one("h4.card-title > a").get_text(strip=True)
    item_content = [item.text for item in items.select("td")[2:]]
    cars = ([f'{str(item_title)} {m} {l.split(" ")[0]} ' for m, l in zip(item_content[0::2], item_content[1::2])])
    allcars.append(cars)
    for car in cars:
        print(car)
输出:

Audi A1 75kg 
Audi A3 75kg 
Audi A4 90kg 
Audi A5 90kg 
Audi A6 100kg 
Audi A7 100kg 
Audi A8 100kg 
Audi Q2 75kg 
Audi Q3 75kg 
Audi Q5 75kg...
这段代码列出了两个所有的车和一个其他的车,并在车之间循环。allcars包含汽车制造商、模式和负载的列表:

[['Audi A1 75kg ', 'Audi A3 75kg ', 'Audi A4 90kg ', 'Audi A5 90kg ', 'Audi A6 100kg ', 'Audi A7 100kg ', 'Audi A8 100kg ', 'Audi Q2 75kg ', 'Audi Q3 75kg ', 'Audi Q5 75kg ', 'Audi Q7 75kg ', 'Audi Q8 100kg '], ['BMW 1 Serie 75kg ', 'BMW 2 Serie Active Tourer 75kg ', 'BMW 2 Serie Cabrio 0kg....

稍微弄清楚[::2]和[1::2]的工作原理或描述它们的任何链接都会有所帮助。谢谢。@SMTH我已经编辑了带有项目内容[::2]=从索引0开始,跳到下一个模型项目内容[1::2]=从索引1开始,跳到下一个加载,但编辑必须得到受信任社区成员的批准[::2]和[1::2]有点清楚工作或任何已被描述的链接都会有帮助。谢谢。@SMTH我已经编辑了包含项目内容[::2]=从索引0开始并跳到下一个模型项目内容[1::2]的帖子=从索引1开始,跳2次到下一个加载,但编辑必须由受信任的社区成员批准。使用您的解决方案,我只获得每个列表的第一项。现在我已编辑了我的代码,以符合您的愿望。。它与Andrej Kesely的代码几乎相同,但有点不同使用您的解决方案,我只得到每个列表的第一项。现在我编辑了我的代码,使其符合您的愿望。。它与Andrej Kesely的代码几乎相同,但有点不同