2012-03-30 40 views
6

Tôi đang cố gắng phân tích cú pháp danh sách kết quả của http://mobile.de.Phân tích cú pháp HTML với BeautifulSoup 4 và Python

Trước tiên, tôi đã thử với Lớp học HTMLParser, nhưng tôi gặp lỗi: HTMLParser.HTMLParseError: EOF in middle of construct.

Vì vậy, tôi đã thử nó với BeautifulSoup 4 tốt hơn cho các trang web không hợp lệ, nhưng <div> Tôi đang tìm kiếm không thể truy cập được và tôi không thể biết đó là lỗi của tôi hay của trang web.

from bs4 import BeautifulSoup 
    import urllib 
    import socket 

    searchurl = "http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro" 
    f = urllib.urlopen(searchurl) 
    html = f.read() 
    soup = BeautifulSoup(html) 

    for link in soup.find_all("div","listEntry "): 
     print link 

listEntry<div> với kết quả của những chiếc xe. Nhưng có vẻ như anh ấy không phân tích cú pháp <form id="parkAndCompareVehicle" name="parkAndCompareVehicle" action="">. Tôi không thể tìm thấy hình thức trong soupobject.

Lỗi ở đâu?

+1

gì bạn nhận được nếu bạn thử cách sau vòng lặp for để thay thế? - 'cho liên kết trong soup.find_all (" form ", id =" parkAndCompareVehicle ")'? (Xem http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll(name,%20attrs,%20recursive,%20text,%20limit,%20* * kwargs)) –

+0

Tôi không nhận được gì. Tôi cũng đã thử với find_all ("form") và tôi chỉ nhận được 2 người khác. – user1010775

+0

hmm 'soup.find_all ('form', id = 'parkAndCompareVehicle')' trả về biểu mẫu cho tôi – gorlum0

Trả lời

2

Nó phải là một cái gì đó như:

for link in soup.findAll('div', {'class': 'listEntry '}): 
    print link 

Thuộc tính được quy định trong một cuốn từ điển - findAll(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)

==========

UPD. Xin lỗi nó có vẻ trong bs4 bạn có thể làm theo cách đó là tốt.

Đối với lỗi, biểu mẫu bạn đang tìm kiếm không có trong kết quả vì nó bao quanh listEntries theo như tôi thấy.

Có gì sai với điều đó:

form = soup.find('form', id='parkAndCompareVehicle') 
print len(form.find_all('div', 'listEntry ')) 
+0

Đó là nội dung - xem http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll(name, % 20attrs,% 20recitive,% 20text,% 20limit,% 20 ** kwargs) –

+0

Dường như (findALL) có nghĩa là BeautifulSoup3, nhưng iam sử dụng Phiên bản 4. Nếu tôi sử dụng find_all ('div', 'btn') tôi nhận được nội dung của btn-div. Đó không phải là lỗi. xem [doku bs 4.0] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all) – user1010775

+0

Làm cách nào tôi có thể làm việc đó? :/ – user1010775

Các vấn đề liên quan