selenium+xpath爬取深圳失信公司

 

   Hello everybody ! 很久沒有更新文章了,最近公司太忙了,沒得辦法。這周和一高中同學聊天,他的職業是一名律師,最近他自己在深圳創業,需要獲取“中國執行信息公開網“的一些失信公司信息,作爲一個小渣渣的我於是毛遂自薦答應幫他爬取到這些數據。當時本人心裏虛的一批,不知道憑自己的渣渣技術能不能幫助到他,但是爲了幫助好哥們創業我也就豁出去了,哈哈!

  那好,首先我們看下這個網站“http://zxgk.court.gov.cn/shixin/”的大概界面顯示,我們把網頁往下拉可以看到有一欄查詢條件,其中包括“被執行人姓名”、“省份”、“身份證號碼”、“驗證碼”。在這裏我們只需要在“被執行人姓名/名稱”中輸入“深圳”,然後再輸入正確的驗證碼並點擊查詢即可獲取到查詢結果,如圖所示。

    那我們現在對這個網頁有個大概的瞭解了,那我們要怎麼獲取到查詢結果中的公司名稱、立案時間和案號呢?

                                                                         æç¬è¿å¯æä¹å

   我們一一進行解析,這邊呢我們最主要解決的是在輸入框輸入文字和驗證碼的問題,這個驗證碼是實時、非固定的。對於文字輸入的問題我可以使用之前學過的selenium、Xpath定位元素的方法解決,那驗證碼該怎麼解決呢?這個超出我的知識範圍了,於是左思右想就想到了B站,這裏要誇讚B站真是個神奇的網站,通過網站我找到了一種最簡單的方法,就是先把當前的驗證碼進行截屏並保存到本地,然後通過input方法手動輸入驗證碼,這樣就解決了驗證碼的問題  。                                                                                                                                 æç¬è£¸çï¼æç天å

  那再接下來,我們在詳細講一下是怎麼通過selenium、Xpath進行元素定位的呢。這裏我使用的是Firefox瀏覽器。首先我們鼠標右擊空白界面選擇查看元素,然後點擊左上角的鼠標箭頭,然後把鼠標移動到輸入框位置,這時我們可以看到查看元素界面有個高亮顯示,大家可以看下高亮顯示的部分呢有一個id="pName" ,那我們就可以通過這個id屬性進行元素定位,同理驗證碼的輸入框是id="yzm"。我們定位到元素位置後再使用send_keys()的方法輸入文本內容就可以了。

                                                                     æç¬ä»å¤©ä¹è¦å¼å¿é¸­

 那我們接下來就是要獲取查詢結果中的內容了,這次我們主要使用的是Xpath方法來獲取我們想要的內容,基本思路和大家說的差不多了,那開始上代碼吧!

                                                    æç¬åå¢ï¼ä¸¤ç¼åå

                                                                        æç¬åå¢ï¼ä¸¤ç¼åå

第一部分:登錄網頁和查輸入驗證碼進入查詢結果界面:

                                                                               æç¬ç´§å¼ å°åæ

import requests
from selenium import  webdriver
from time import sleep
from PIL import Image

driver = webdriver.Firefox()
driver.get('http://zxgk.court.gov.cn/shixin/')
driver.maximize_window()

driver.find_element_by_id('pName').send_keys('深圳') #定位到“被執行人姓名/名稱”並輸入深圳
sleep(2)
'''對當前界面進行截屏'''
driver.save_screenshot('a.png')  
loc = driver.find_element_by_id('captchaImg')
print(loc.location)
print(loc.size)
left = loc.location['x']
top = loc.location['y']
right = left + loc.size['width']
bottom = top + loc.size['height']
im = Image.open('a.png')
im = im.crop((left,top,right,bottom))
im.save('c.png')
sleep(2)
yzm = input('請輸入正確的驗證碼:')
sleep(5)
'''定位到驗證碼位置手動輸入驗證碼並點擊查詢'''
driver.find_element_by_id("yzm").send_keys(yzm)
driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[3]/form/div[4]/div[6]/button").click()

   第二部分:獲取查詢結果中的公司名稱、立案時間、案號

                                                                      æç¬åé  è¿æ ·ä¹è¡åæç¬åé  è¿æ ·ä¹è¡å

import  pandas as pd
import numpy as np

name = []
time = []
anhao = []
'''定義函數'''
def get_content():
    lujing = driver.find_elements_by_xpath(".//*[@id='tbody-result']/tr")
    #print(lujing)
    for t1 in lujing: 

        #公司名稱
        t2 = t1.find_element_by_xpath('./td[2]').text 
        #print(t2)
        name.append(t2)

        # time = driver.find_elements_by_xpath(".//*[@id='tbody-result']/tr")
        #立案時間
        t3 = t1.find_element_by_xpath('./td[3]').text
        time.append(t3)
        #案號名稱
        t4 = t1.find_element_by_xpath('./td[4]').text
        anhao.append(t4)
    #print(name)
   # print(time)
    #print(anhao)
    dict1 = {'time':time,'name':name,'anhao':anhao}
    print(dict1)
    #使用pandas中的DataFrame進行數據保存成csv格式
    df1 = pd.DataFrame.from_dict(dict1)
    df1.to_csv('falv_data.csv')

第三部分:使用for循環爬取所有內容

                                                                    æç¬ç¥çå»ç¬ 

#定位到頁面輸入框
for i in  range(1,51):
    sleep(3)
    driver.find_element_by_xpath(".//*[@id='goto']").send_keys(i)
    # sleep(3)
    driver.find_element_by_xpath(".//*[@id='page-div']/div[5]/span").click()
    sleep(5)
    get_content()
    driver.find_element_by_xpath(".//*[@id='goto']").clear()
    sleep(2)
    if i == 50:
        driver.quit()
        print("下載完成")
    else:
        continue

那最後是全部代碼:


import requests
from selenium import  webdriver
from time import sleep
from PIL import Image
import  pandas as pd
import numpy as np


driver = webdriver.Firefox()
driver.get('http://zxgk.court.gov.cn/shixin/')
driver.maximize_window()

driver.find_element_by_id('pName').send_keys('深圳')
sleep(2)
driver.save_screenshot('a.png')
loc = driver.find_element_by_id('captchaImg')
print(loc.location)
print(loc.size)
left = loc.location['x']
top = loc.location['y']
right = left + loc.size['width']
bottom = top + loc.size['height']
im = Image.open('a.png')
im = im.crop((left,top,right,bottom))
im.save('c.png')
sleep(2)
yzm = input('請輸入正確的驗證碼:')
sleep(5)
driver.find_element_by_id("yzm").send_keys(yzm)
driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[3]/form/div[4]/div[6]/button").click()
#序號
#print(driver.find_element_by_xpath('//*[@class="moible-hide"]').text)
#公司名稱
#print(driver.find_elements_by_xpath(".//*[@id='tbody-result']/tr/td[2]"))
name = []
time = []
anhao = []

def get_content():
    lujing = driver.find_elements_by_xpath(".//*[@id='tbody-result']/tr")
    #print(lujing)
    for t1 in lujing:

        t2 = t1.find_element_by_xpath('./td[2]').text
        #print(t2)
        name.append(t2)

        # time = driver.find_elements_by_xpath(".//*[@id='tbody-result']/tr")

        t3 = t1.find_element_by_xpath('./td[3]').text
        time.append(t3)

        t4 = t1.find_element_by_xpath('./td[4]').text
        anhao.append(t4)
    #print(name)
   # print(time)
    #print(anhao)
    dict1 = {'time':time,'name':name,'anhao':anhao}
    print(dict1)
    df1 = pd.DataFrame.from_dict(dict1)
    df1.to_csv('falv_data.csv')


#定位到頁面輸入框
for i in  range(1,51):
    sleep(3)
    driver.find_element_by_xpath(".//*[@id='goto']").send_keys(i)
    # sleep(3)
    driver.find_element_by_xpath(".//*[@id='page-div']/div[5]/span").click()
    sleep(5)
    get_content()
    driver.find_element_by_xpath(".//*[@id='goto']").clear()
    sleep(2)
    if i == 50:
        driver.quit()
        print("下載完成")
    else:
        continue







  那今天就到這裏了,希望以後能掌握更多技術,幫助他人和自己,哈哈!

                                                              æç¬ä½ é£ä¹æ»ç¨½ï¼ä½ ä¸è¿çµè§ä¹

æç¬è£¸çï¼æç天å

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 9897
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章