第一次用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...