在Python中组合两个单独的web垃圾列表

2024-05-01 11:40:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个汽车网站的网页抓取数据,以获得价格。现在,我通过创建两个单独的列表来解决这个问题:一个是定价数据,另一个是车型数据。最后,我想把每个列表和两个一起创建一个CSV。 我为解决这个问题采取的具体步骤如下:

  1. 建立与网站的连接
  2. 创建两个空列表将数据写入
  3. 从页面的每个部分选择正确的数据
  4. 迭代数据并将数据存储到列表中(这就是我遇到的问题)
  5. 最后,我将把两个列表合并为一个CSV。你知道吗
from bs4 import BeautifulSoup
import urllib2

#1) establishing a connection to the website
wiki = "http://www.morong.com/used-inventory/index.htm?start=16&"
req = urllib2.Request(wiki)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page, 'lxml')

#2) creating two empty lists to write the data into
valueHolder = []
nameHolder = []

#3) selecting the correct data from each part of the page 
value = soup.findAll("span", { "class" : "value" })

name = soup.findAll("a", {"class" : "url"})

#4) iterates over rows and turns each row into a text field
for row in value:
    valueholder = row.text

for row in name:
    nameHolder = row.text
print(valueholder)
print(nameHolder)

当我打印valueHoldernameHolder时,我只返回每个for循环的最后一行。如何打印所有值?你知道吗


Tags: csvthe数据textfromimport列表for
3条回答

使用zip()函数连接这两个列表:

value = [row.text for row in value]   
name = [row.text for row in name]
zipped_value_name = list(zip(value, name))

for row in zipped_value_name:
    print(row)

也可以创建字典而不是列表dict_not_list = dict((zip(name, value))

您在循环中分配valueHoldernameHolder标识符,而不是向列表中添加元素。试试这个:

for row in value:
          valueHolder.append(row.text)    
     for row in name:
         nameHolder.append(row.text)

要组合列表,可以使用map,例如

combinations = list(map(lambda x,y: [x,y], nameHolder, valueHolder))

简单地说:

for row in value:
    valueholder = row.text
    print(valueholder)

for row in name:
    nameHolder = row.text
    print(nameHolder)

相关问题 更多 >