1. 程式人生 > >xpath的使用方法以及python爬取資料的儲存

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)