python爬蟲selenium爬取開開貸黑名單

2021-08-13 10:07:29 字數 4677 閱讀 8030

第一次用selenium爬取黑名單資料,但是不夠自動化,頁面總長和每頁有多少條記錄都是手動設定變數新增的,很不智慧型。

這次**改進了一下內容:

(1)把頁碼有關的資訊切出來,自動獲取頁數

(2)查詢每頁有多少記錄

(3)利用兩個list儲存資料,更好維護

(4)利用css_selector獲取資料,並且改了

(5)寫成了函式,更加規範

(6)丟擲異常

(7)timeout的問題,原來設定了30,後來timeout丟擲了異常,改為120

題外話:selenium很方便,最大的好處是解決了動態網頁的問題,雖然本題不是動態網頁,但是相對速度也慢些,爬取378條資料需要超過400秒。

import time,csv

import traceback

from selenium import webdriver

from selenium.webdriver.common.keys import keys

url_whole=''

# 載入所有頁面

def parsepage():

#設定驅動瀏覽器s

browser=webdriver.chrome()

#設定響應

browser.set_page_load_timeout(120)

#獲取**

browser.get(url_whole)

#找多少頁

page_info=browser.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > div > table > tbody > tr > td:nth-child(1)')

# 把有關頁碼的資訊切出來,第1頁/共38頁/每頁10條/共378條

pages=page_info.text.split('/')[1]

pages=int(pages[1:3])

#遍歷每一頁

list_data =

for page in range(pages):

#自動讀取頁數,設定頁數

elem=browser.find_element_by_name('rpmessage')

elem.send_keys(page)

elem.send_keys(keys.return)

#找每頁有多少記錄

records=browser.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main').find_elements_by_class_name('hmd_ytab')

#page_datas = loadrecords(records)

idx = 1

for record in records:

idx +=1

try:

#利用css_selector獲取資料

name = record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(1) > td:nth-child(3) > a').text

hid=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(2) > td:nth-child(2)').text

email=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(1) > td:nth-child(5)').text

homenumber=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(2) > td:nth-child(4)').text

numofloan=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(1) > td:nth-child(7)').text

numofkai=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(2) > td:nth-child(6)').text

address=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(3) > td:nth-child(2)').text

mobilephone=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(3) > td:nth-child(4)').text

daysofloan=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(3) > td:nth-child(6)').text

companyname=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(4) > td:nth-child(2)').text

totalamount=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(4) > td:nth-child(6)').text

companyaddress=record.find_element_by_css_selector('#form1 > div:nth-child(11) > div > div.jklb_bkd > div.main > table:nth-child('+str(idx)+') > tbody > tr:nth-child(5) > td:nth-child(3)').text

data =

except:

traceback.print_exc()

#print(record.text)

print(len(list_data))

return list_data

# 寫入csv檔案

def writecsv(list_data):

filepath = 'c:\\users\\desktop\\pywork\\kkd\\kkd.csv'

#title = ['name','hid','email','homenumber','numofkai','numofloan','address','mobilephone','daysofloan','companyname','companyaddress','totalamount']

with open(filepath,"w+",newline="") as csvfile:

writer = csv.writer(csvfile)

#先寫入columns_name

#writer.writerow(title)

#寫入多行用writerows

writer.writerows(list_data)

def main():

list_data = parsepage()

writecsv(list_data)

if __name__ == "__main__":

main()

資料結果是正確的,涉及隱私,這裡不貼了

python爬蟲 非同步爬蟲

壞處 無法無限制的開啟多執行緒或者多程序。執行緒池 程序池 適當使用 使用非同步實現高效能的資料爬取操作 人多力量大 環境安裝 pip install aiohttp 使用該模組中的clientsession 2表示同時存在兩個協程 pool pool 2 urls for i in range 1...

Python爬蟲 初識爬蟲

模擬瀏覽器開啟網頁,獲取網頁中我們想要的那部分資料 瀏覽器開啟網頁的過程 當你在瀏覽器中輸入位址後,經過dns伺服器找到伺服器主機,向伺服器傳送乙個請求,伺服器經過解析後傳送給使用者瀏覽器結果,包括html,js,css等檔案內容,瀏覽器解析出來最後呈現給使用者在瀏覽器上看到的結果 瀏覽器傳送訊息給...

python爬蟲基本流程 Python爬蟲流程

python爬蟲流程 主要分為三個部分 1 獲取網頁 2 解析網頁 獲取資料 儲存資料 三個流程的技術實現 1.獲取網頁 獲取網頁的技術基礎 urllib requests selenium 獲取網頁的高階技術 多執行緒抓取 登入抓取 突破ip限制和伺服器抓取 2.解析網頁 解析網頁的技術基礎 re...