SQLite,BeautifulSoup,Table Parse - >列表 - >到Sqlite问题

时间:2016-06-22 09:33:55

标签: python sqlite beautifulsoup html-table

编辑!:我将解释我想要实现的目标。我有这个代码从主搜索页面废弃数据。 http://pastebin.com/c6hRN6ac。它在主页面上搜索包含我想要的数据的div。然后我将它们分配给var名称,年份,引擎,里程等。

data = [name,year,engine,mileage,link,transm,status,price]

此文本数据列表转到

conn.execute("INSERT INTO Cars VALUES (NULL,?,?,?,?,?,?,?,?)",data)

它按照我的计划工作。(在主搜索页面上有更少的数据,然后详细的车页)

现在我正在获取所有车辆ID链接,将它们与页面网址相结合,并尝试使用此代码http://pastebin.com/hRkmMkHZ

循环每个车辆ID以获取详细信息

现在def get_car_id():有效。问题出在def cars_info():

我想使用我在第一个代码中使用的相同概念:

data = [name,year,engine,mileage,link,transm,status,price]

conn.execute("INSERT INTO Cars VALUES (NULL,?,?,?,?,?,?,?,?)",data)

现在第二个代码给了我一个输出:

[' მწარმოებელი :  BMW']
[' მოდელი :  M3 ']
[' გამოშვების წელი :  2003 / 03']
[' კატეგორია :  სედანი']
[' საწვავის ტიპი :  ბენზინი']
[' ძრავის მოცულობა :  3200 ']
[' გარბენი :  141 კმ.']
[' ცილინდრები :  8']
[' გადაცემათა კოლოფი :  მექანიკური']
[' წამყვანი თვლები :  უკანა']
[' კარები :  4/5']
[' საჭე :  მარცხნივ']
[' მანქანის ფერი :  ნაცრისფერი']
[' სალონის ფერი :  შავი']
[' აირბეგი :  8']
['VIN :  WBS-BL91000JP85609']

[' მწარმოებელი :  MERCEDES-BENZ']
[' მოდელი :  S 320 ']
[' გამოშვების წელი :  2001']
[' კატეგორია :  სედანი']
[' საწვავის ტიპი :  გაზი/ბენზინი']
[' ძრავის მოცულობა :  3200 ']
[' გარბენი :  160000 კმ.']
[' ცილინდრები :  6']
[' გადაცემათა კოლოფი :  ტიპტრონიკი']
[' წამყვანი თვლები :  უკანა']
[' კარები :  4/5']
[' საჭე :  მარჯვნივ']
[' მანქანის ფერი :  შავი']
[' სალონის ფერი :  შავი']
[' აირბეგი :  12']
['VIN : ']

[' მწარმოებელი :  HONDA']
[' მოდელი :  Cr-v ']
[' გამოშვების წელი :  2003']
[' კატეგორია :  ჯიპი']
[' საწვავის ტიპი :  ბენზინი']
[' ძრავის მოცულობა :  2400 ']
[' გარბენი :  267200 კმ.']
[' ცილინდრები :  4']
[' გადაცემათა კოლოფი :  ავტომატიკა']
[' წამყვანი თვლები :  4x4']
[' კარები :  4/5']
[' საჭე :  მარცხნივ']
[' მანქანის ფერი :  ლურჯი']
[' სალონის ფერი :  შავი']
[' აირბეგი :  4']
['VIN : ']

[' მწარმოებელი :  BMW']
[' მოდელი :  325 ']
[' გამოშვების წელი :  2003']
[' კატეგორია :  სედანი']
[' საწვავის ტიპი :  ბენზინი']
[' ძრავის მოცულობა :  2500 ']
[' გარბენი :  169 კმ.']
[' ცილინდრები :  6']
[' გადაცემათა კოლოფი :  მექანიკური']
[' წამყვანი თვლები :  4x4']
[' კარები :  4/5']
[' საჭე :  მარცხნივ']
[' მანქანის ფერი :  ცისფერი']
[' სალონის ფერი :  შავი']
[' აირბეგი :  8']
['VIN : ']

一辆车的详细信息以VIN

结尾

现在我如何使用相同的概念来保​​存像这样的列表中的每辆车的数据

data = [('BMW','M3','2003 / 03','სედანი','ბენზინი','3200','141 კმ.','8','მექანიკური','უკანა','4/5','მარცხნი','ნაცრისფერი','შავი','8','WBS-BL91000JP85609') , ('MERCEDES-BENZ','S 320','2001','სედანი','გაზი/ბენზინი','3200','160000 კმ.','6','ტიპტრონიკი','უკანა','4/5','მარჯვნივ','შავი','შავი','12','')]

等我在def get_car_id()

进入的其他车型

所以我可以使用此代码将数据插入数据库

conn.execute("INSERT INTO Cars VALUES (NULL,?,?,?,?,?,?,?,?)",data)

HTML看起来像这样:

<tr>
        <th class="th-left">
            <div class="th-key"> Manufacturer</div>
            <div class="th-value"> NISSAN</div>
        </th>
        <th class="th-right">
            <div class="th-key"> ABS</div>
            <div class="th-value"><i class='fa fa-check'></i></div>
        </th>
        </tr>
    <tr>
    <th class="th-left">
        <div class="th-key"> Model</div>
        <div class="th-value"> X-Trail </div>
    </th>
    <th class="th-right">
        <div class="th-key"> El. Windows</div>
        <div class="th-value"><i class='fa fa-check'></i></div>
    </th>
  </tr>
  <tr>
    <th class="th-left">
        <div class="th-key"> Prod. Year</div>
        <div class="th-value"> 2002</div>
    </th>
    <th class="th-right">
        <div class="th-key"> Air Condintioner</div>
        <div class="th-value"><i class='fa fa-check'></i></div>
    </th>
  </tr>

我只做<th class="th-left">

1 个答案:

答案 0 :(得分:0)

如果您想单独使用所有值,请使用div:

拉取值
from bs4 import BeautifulSoup

soup = BeautifulSoup(h)

for row in soup.select("table tr th"):
    a, b = row.select_one("div.th-key"), row.select_one("div.th-value")
    print a.text,b.text

它为您提供了所有数据:

Manufacturer NISSAN
ABS 
Model X-Trail
El. Windows 
Prod. Year 2002
Air Condintioner 
Category Jeep
Climate System 
Fuel Type Gas/Petrol
Leather interior 
Engine Volume 2000
Disks: 
Mileage 140000 km.
Navigation System: 
Cylinders 4
Central Lock: 
Gear Type Automatic
Hatch: 
Drive Wheels 4x4
Alarm: 
Doors 4/5
Board Computer: 
Wheel WHELL right
Hydraulics: 
Car color silver
Anti skid: 
Interior color grey
Chair Warming: 
Airbags 0
Parking Control: 
VIN 
უკანა ხედვის კამერა: 

或者:

from bs4 import BeautifulSoup

soup = BeautifulSoup(h)

for row in soup.select("table tr"):
    a, b = row.select_one("th div.th-key"), row.select_one("th div.th-value")
    if a:
        print a.text.strip(),b.text.strip()

这给了你:

Manufacturer NISSAN
Model X-Trail
Prod. Year 2002
Category Jeep
Fuel Type Gas/Petrol
Engine Volume 2000
Mileage 140000 km.
Cylinders 4
Gear Type Automatic
Drive Wheels 4x4
Doors 4/5
Wheel WHELL right
Car color silver
Interior color grey
Airbags 0
VIN 

如果您只想要左侧标题中的th值文本:

h = """<table>
<tr>
        <th class="th-left">
            <div class="th-key"> Manufacturer</div>
            <div class="th-value"> NISSAN</div>
        </th>
        <th class="th-right">
            <div class="th-key"> ABS</div>
            <div class="th-value"><i class='fa fa-check'></i></div>
        </th>
        </tr>
    <tr>
    <th class="th-left">
        <div class="th-key"> Model</div>
        <div class="th-value"> X-Trail </div>
    </th>
    <th class="th-right">
        <div class="th-key"> El. Windows</div>
        <div class="th-value"><i class='fa fa-check'></i></div>
    </th>
  </tr>
  <tr>
    <th class="th-left">
        <div class="th-key"> Prod. Year</div>
        <div class="th-value"> 2002</div>
    </th>
    <th class="th-right">
        <div class="th-key"> Air Condintioner</div>
        <div class="th-value"><i class='fa fa-check'></i></div>
    </th>
  </tr>
</table>"""

使用上面的html:

from bs4 import BeautifulSoup

soup = BeautifulSoup(h)

print([d.text.strip() for d in soup.select("table tr th.th-left div.th-value")])

给你:

[u'NISSAN', u'X-Trail ', u'2002']