2016-11-18 36 views
-1

我是一個Python和網頁抓取的初學者,但我真的很感興趣。我想要做的是提取每天的搜索結果總數。如何使用Python刮總搜索結果

如果你打開它,你會在這裏看到:

二手汽車 結果1 - 的30376

20我要的是數量只有30376。有沒有什麼辦法可以每天自動提取並將其保存到excel文件中?我已經在周圍一些Python包播放,但我得到的是錯誤信息和下面一樣不相關的事情:

from bs4 import BeautifulSoup 
from urllib.request import urlopen 

base_url = "..." 

def make_soup(url): 
    html = urlopen(url).read() 
    return BeautifulSoup(html, "lxml") 

make_soup(base_url) 

有人能告訴我如何提取該特定號碼好嗎?謝謝!

+0

感謝您的答案。他們都工作!我的另一個問題是,我需要將該數字與當天的日期一起確定到現有的excel文件中。這個文件已經有我在過去幾個月手動提取的數字。該表有2列:日期,編號。請問可以這樣做嗎?再次感謝! – Sunshine

+0

你打算從哪裏得到日期? HTML DOM對象是否也包含Date? – MYGz

+0

嗨穆罕默德,謝謝你的問候!我檢查了HTML,但沒有看到任何日期信息。那麼這是否意味着無法獲得日期?如果沒有,沒關係,但是如何將輸出編號保存到我現有的excel文件中?如果可能,我想讓它在數字欄下進行:)再次感謝! – Sunshine

回答

0

這裏是通過requests模塊和soup.select功能的一種方式。

from bs4 import BeautifulSoup 
import requests 

base_url = "http://www.autotrader.co.nz/used-cars-for-sale" 

def make_soup(url): 
    html = requests.get(url).content 
    soup = BeautifulSoup(html, "lxml") 
    txt = soup.select('#result-header .result-count')[0].text 
    print txt.split()[-1] 

make_soup(base_url) 

soup.select接受一個CSS選擇器作爲參數。該#result-header .result-count選擇器意味着找到具有result-count類的元素,該元素在具有result-header的元素內作爲id。

+0

謝謝Avinash! – Sunshine

0
from bs4 import BeautifulSoup 
import requests, re 

base_url = "http://www.autotrader.co.nz/used-cars-for-sale" 
a = BeautifulSoup(requests.get(base_url).content).select('div#result-header p.result-count')[0].text 
num = re.search('([\w,]+)$',a) 
print int(num.groups(1)[0].replace(',','')) 

輸出:

30378 

會得到什麼其它的數量也這是在聲明的結尾。


追加新行現有的Excel文件

腳本追加今天的日期和所提取的數目現有的Excel文件:

!!!重要!!!:不要直接在主文件上運行此代碼。請首先製作它的副本並在該文件上運行。如果它工作正常,那麼你可以在你的主文件上運行它。 我不負責,如果你失去了你的數據:)

import openpyxl 
import datetime 

wb = openpyxl.load_workbook('/home/yusuf/Desktop/data.xlsx') 
sheet = wb.get_sheet_by_name('Sheet1') 

a = sheet.get_highest_row() 
sheet.cell(row=a,column=0).value=datetime.date.today() 
sheet.cell(row=a,column=1).value=30378 # use a variable here from the above (previous) code. 

wb.save('/home/yusuf/Desktop/data.xlsx') 
+0

謝謝穆罕默德! – Sunshine

+0

@Sunshine如果問題解決了,請考慮接受最佳答案。 – MYGz

+0

再次感謝穆罕默德:) – Sunshine

0
from bs4 import BeautifulSoup 
from urllib.request import urlopen 

base_url = "http://www.autotrader.co.nz/used-cars-for-sale" 
html = urlopen(base_url).read() 
soup = BeautifulSoup(html, 'lxml') 

result_count = soup.find(class_="result-count").text.split('of ')[-1] 

print(result_count) 

出來:

30,376 
+0

謝謝洪傑! – Sunshine