2017-04-17 30 views
1

我的代码当前在抓取过程中创建了以下输出:https://pastebin.com/pUcCdbMn在抓取过程中返回“无”

我想在listing-title文本,即

<h2 class="listing-title"><a class="listing-fpa-link" href="...">Vauxhall Astra 1.6i 16V Design 5dr Hatchback</a></h2> 

回报沃克斯豪尔雅特1.6i 16V设计5DR两厢

listing-key-specs,即

<ul class="listing-key-specs"> 
<li>2015 
(65 reg)</li> 
<li>Hatchback</li> 
<li>14,304 miles</li> 
<li>Manual</li> 
<li>1.6L</li> 
<li>Petrol</li> 
</ul> 

回报2015年( 65分),掀背车,“14,304英里”,手动,1.6升,汽油全部作为单独变量。

我该如何做到这一点?

for page in range(1, 3): 
    page_count = str(page) 
    if page is 1: 
     url = "http://www.autotrader.co.uk/car-search?sort=sponsored&radius=1500&postcode=se218qe&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New" 
    else: 
     url = "http://www.autotrader.co.uk/car-search?sort=sponsored&radius=1500&postcode=se218qe&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New&page=" + page_count 
    browser.get(url) 
    soup = BeautifulSoup(browser.page_source, "html.parser") 
    cars = soup.find_all('li', {'class': 'search-page__result'}) 
    cars_count = len(cars) 
    print 'Processing ' + str(cars_count) + ' cars found on page ' + page_count 

    # Loop through cars on page 
    for car in cars: 
     car_name = car.find('h2 ', {'class': 'listing-title'}) 
     print car_name 

回答

3

你一个标签名称后得到这个额外的空间:

car_name = car.find('h2 ', {'class': 'listing-title'}) 
       # HERE^ 

删除它,它应该开始工作的是,当我尝试提取物品名称我的代码返回当前None

需要注意的是,拿到冠军的文本,使用get_text()方法:

print(car_name.get_text(strip=True)) 

你也可以更换.find().select_one()

car_name = car.find('h2.listing-title') 

我也做脚本更可靠,并且explicitly wait的搜索结果在读取页面源并将其传递给进一步解析之前出现:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.wait import WebDriverWait 

# ... 
browser.get(url) 

wait = WebDriverWait(browser, 10) 
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".search-page__result .listing-title"))) 

soup = BeautifulSoup(browser.page_source, "html.parser")