xpath的使用方法以及python爬取資料的儲存
前面寫了幾篇關於自己爬蟲時的進度以及遇到的問題,今天系統的爬取了一個網站之後又對爬蟲方法有了更好的認識,所以今天我會盡量用明晰的語言來給大家介紹這些方法。
首先說明下我要爬取的內容:http://www.zbj.com/appdingzhikaifa/sq10054601.html 開啟這個網址會有很多店鋪,我的第一步就是爬取這個網址中店鋪所對應的公司名,程式碼在我前面的文章中有提到,這塊就不展示了。然後 http://www.qichacha.com 我會在這個網站搜尋這些公司名,你會發現會有很多同名不同地區的公司,而我接下來就是需要爬下這些所有公司名的資訊。
我覺得對於任何一個頁面的資訊爬取的方法無非Beautifulsoup或者webdriver 的方法,我自己感覺我沒有太弄懂beautifulsoup,所以有時還不是很熟練,接下來我就重點介紹webdriver中的xpath。
import selenium.webdriver as webdriver #webdriverd 所需要的庫
>>> driver=webdriver.Chrome() #開啟瀏覽器 ,這裡建議大家使用谷歌瀏覽器,根據自己對應電腦版本去官網下載對應版本就好,當然還要安裝一個webdriver,百度同樣可以搜尋下載到,然後還有環境的配置等。。。(好像走題了)
results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a") #重點是這一句程式碼,//表示相對路徑,/表示絕對路徑,其中你找到你所需要資訊的模組,比如‘div class’。而後面的a就是你找到的模組中的帶有a的text文字。查詢到後print就可以
至於怎麼轉到http://www.qichacha.com 用這個網址搜尋到的公司內容,同樣的,python中網址是可以相加的,設立一個base_url就可以。
爬下你的內容之後就是儲存了,我看了很多方法學習到的:with open ('1,txt','wb') as f: f.write()
中間的1.txt你也可以改成xlsx格式等。儲存路徑預設在你的python資料夾中。當然你在使用with open 時需要加上這三行程式碼:
import sys
>>> reload(sys)
>>> sys.setdefaultencoding('utf-8')
我這裡還有一個問題沒有解決就是f.write寫時只會儲存出來最後一頁資訊,貌似會覆蓋前面的資訊,大家有解決的方法可以和我探討。
最後附上程式碼"
import urllib,sys
import selenium.webdriver as webdriver
import sys
>>> reload(sys)
>>> sys.setdefaultencoding('utf-8')
>>> driver=webdriver.Chrome()
>>> driver.get('http://www.zbj.com/appdingzhikaifa/sq10054601.html')
>>> results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a")
>>> res=[]
>>> for result in results:
if result.text not in res:
res.append(result.text)
a=[]
>>> for r in res:
s=r.encode("gbk")
base_url='http://www.qichacha.com/search?key='
a.appendbase_url+urllib.quote(s.decode(sys.stdin.encoding).encode('utf8')))
>>> print a
>>> for r in a:
driver.get(r)
results=driver.find_elements_by_xpath("//p[@class='m-t-xs']")
for result in results:
print result.text
#接下來就是轉碼問題
for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
for result in result1:
print result.text
for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
with open('1.txt','wb') as f:
for result in result1:
f.write(result)