寫在前面的話
好哥們幫忙,爬下小麥種植資源庫的信息吊奢。兩萬多條數(shù)據(jù)也是難為我那好哥們了。老數(shù)據(jù)庫纹烹,只能用IE10及一下版本瀏覽器打開页滚,而且還是動態(tài)網(wǎng)頁。網(wǎng)頁也不太穩(wěn)定铺呵。只能嘗試用selenium爬著
前期準(zhǔn)備
- anaconda 裝上逻谦,官網(wǎng)有不想說
-
selenium 裝上,
image.png
pip install selenium
IE 10 webdriver 的驅(qū)動裝上(曾經(jīng)在win 10 64位的IE 11上試過陪蜻,click() 沒反應(yīng)只能放棄)
IE webdriver 驅(qū)動邦马,下載需要翻-
將internet選項中內(nèi)容的4個“啟動保護(hù)模式”都取消勾選
image.png 代碼
#coding=utf-8
import pandas as pd
import os
from selenium import webdriver
import time
all_number_temp = 50 # 所有種類數(shù)目
iedriver = "C:\Program Files\Internet Explorer\IEDriverServer.exe"
os.environ["webdriver.ie.driver"] = iedriver
driver = webdriver.Ie(iedriver)
def pandas_to_xlsx(info):
pd_look = pd.DataFrame(info)
xlsx_n = '種質(zhì)資源.xlsx'
sheet_n = '種質(zhì)資源'
pd_look.to_excel(xlsx_n,sheet_name=sheet_n)
def smart_wait_repeat(element_old): # 智能等待時間,60秒超時
for i in range(60): # 循環(huán)60次宴卖,從0至59
if i >= 60 : # 當(dāng)i大于等于59時滋将,打印提示時間超時
print("timeout")
break
try: # try代碼塊中出現(xiàn)找不到特定元素的異常會執(zhí)行except中的代碼
if driver.find_element_by_id("r2"):
text_list = driver.find_element_by_xpath("http://body/div[2]").text.split()
if element_old != text_list[21] : # 如果能查找到特定的元素id就提前退出循環(huán)
print(text_list[21])
return text_list
break
except: # 上面try代碼塊中出現(xiàn)異常,except中的代碼會執(zhí)行打印提示會繼續(xù)嘗試查找特定的元素id
print("wait for find element")
time.sleep(0.5)
# 網(wǎng)頁操作
def main():
driver.get("種質(zhì)的網(wǎng)址")
driver.execute_script("query()")
element_old = "0"
text_list = smart_wait_repeat(element_old)
#統(tǒng)計總數(shù)
print(text_list[9])
data_list = []
for index in range(int(all_number_temp)):
text_list = smart_wait_repeat(element_old)
element_old = text_list[21]
driver.find_element_by_id("nexthehe").click()
list_name = "庫編號 品種名稱 屬名 育成年限 東經(jīng) 芒 冬春性 穗長 粗蛋白 硬度 耐澇性 田間抗寒性 條銹反應(yīng)型 葉銹反應(yīng)型 稈銹反應(yīng)型 白粉反應(yīng)型 赤霉病病指 根腐葉病級 省 統(tǒng)一編號 譯名 學(xué)名 原產(chǎn)地 北緯 殼色 成熟期 株高 賴氨酸 容重 芽期耐鹽 人工抗寒性 條銹普遍率 葉銹普遍率 稈銹普遍率 黃矮病 赤霉病指數(shù) 根腐穗病級 樣品類型 保存單位 科名 系譜 高程 來源國 粒色 穗粒數(shù) 千粒重 沉淀值 抗旱性 苗期耐鹽 條銹嚴(yán)重度 葉銹嚴(yán)重度 稈銹嚴(yán)重度 白粉嚴(yán)重度 赤霉病病穗 赤霉病抗性 其它".split()
data = {}
for item_name in list_name:
temp_t = text_list[text_list.index(item_name)+1]
if temp_t in list_name:
data[item_name] = "NA"
else:
data[item_name] = temp_t
#print(data)
data_list.append(data)
pandas_to_xlsx(data_list)
main()
- 后面因為種種原因症昏,改了改代碼随闽,加上
1 統(tǒng)計數(shù)據(jù)總數(shù),循環(huán)總數(shù)遍
2 爬100條就保存下
3 每5秒鐘網(wǎng)頁沒反應(yīng)就點擊下上一頁再點擊下下一頁