亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python動態網頁批量爬取

2020-01-04 17:46:04
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了python動態網頁批量爬取的方法,主要針對四六級成績批量爬取,感興趣的小伙伴們可以參考一下
 

四六級成績查詢網站我所知道的有兩個:學信網(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),這兩個網站采用的都是動態網頁。我使用的是學信網,好了,網站截圖如下:

python動態網頁批量爬取                  

網站的代碼如下:

<form method="get" name="form1" id="form1" action="/cet/query"><table border="0" align="center" cellpadding="0" cellspacing="0"><tr><td align="right">準考證號:</td><td align="left"><input name="zkzh" value="112008000463141" id="zkzh" type="text" size="18" maxlength="15" class="input_text input_t_l" /></td> <td align="left" class="font12 color666">請輸入15位準考證號</td></tr><tr><td align="right">姓名:</td><td align="left"><input name="xm" value="啊啊" id="xm" type="text" size="18" maxlength="50" class="input_text input_t_l" /></td> <td align="left" class="font12 color666">姓名超過3個字,可只輸入前3個</td></tr><tr><td align="center"> </td> <td colspan="2" align="left"><input type="submit" id="submitCET" class="btn_blue" value="查詢" /></td> </tr></table></form>

由圖中可以看出表單提交的鏈接為/cet/query,即:http://www.chsi.com.cn/cet/query,好了,填寫表單和結果如下:

                         python動態網頁批量爬取

 python動態網頁批量爬取

但是,點擊查看源代碼之后發現,沒有成績,即代碼仍是上面那個,之后按F12查看代碼:

<TBODY><TR><TH>姓名:</TH><TD>XXXX</TD></TR><TR><TH>學校:</TH><TD>XXXXXX</TD></TR><TR><TH>考試類別:</TH><TD>英語四級</TD></TR><TR><TH>準考證號:</TH><TD>120135151100101</TD></TR><TR><TH>考試時間:</TH><TD>2015年06月</TD></TR>總分:</TH><TD class=fontBold vAlign="top"><SPAN class=colorRed>403 </SPAN><BR><SPAN class=color666>聽力:</SPAN> 132 <BR><SPAN class=color666>閱讀:</SPAN> 147 <BR><SPAN class=color666>寫作與翻譯:</SPAN> 124 </TD></TR>

該代碼顯示了成績,可以知道,該網站使用的是動態網頁,用的JavaScript或者Ajax.js還是其他的我就不知道了0.0。上面為需求。 

前言:使用過BeautifulSoup爬取過,但是BeautifulSoup是爬取不了動態網頁的,上各種論壇找各種資料,用了n種東西,scapy,pyqt等等,走了真心不少彎路,不是不行,應該是我不會用,最終用了selenium和phantomjs,這兩個應該也是目前最流行的爬蟲模塊了吧。

一、導入selenium和phantomjs

from selenium import webdriverdriver = webdriver.PhantomJS(executable_path='D:/phantomjs-2.1.1-windows/phantomjs.exe')driver.get(url)driver.find_element_by_id('zkzh').send_keys(i)driver.find_element_by_id('xm').send_keys(xm)driver.find_elements_by_tag_name('form')[1].submit()

代碼說明:

  3.selenium可以加載很多驅動,比如Chrome、FireFox等,這里需要有這兩個瀏覽器和驅動才行,折騰了一下,網上說Phantomjs是較好的了

  5、6、7分別是準考證號,姓名和提交

二、字符處理

提交之后就可以直接查找了:

print driver.find_element_by_xpath("//tr[3]/td[1]").textprint driver.find_element_by_xpath("//tr[6]/td[1]").text

代碼說明:

  1.查看姓名

  2.查看分數及其具體成績

打印之后為:

姓名聽力閱讀寫作

  之后要對分數進行字符串處理,選取各部分的數字,這里我們采用re模塊:

 import rem = re.findall(r'(/w*[0-9]+)/w*', chuli2)

其中m是數組,輸出的是["403","132","147","142"]

三、數據庫

  我們學校也不知說很渣還是人性化,反正公布了全校的四六級準考證號,當然,是excel的,需要導入mysql數據庫,打開Excel之后,我發現微軟大法和Oracle真是牛,Excel365居然有mysql workbench連接部分。

python動態網頁批量爬取

 數據庫代碼如下:

import MySQLdbconn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='cet', port=3306, charset='utf8')cur = conn.cursor()curr = conn.cursor()cur.execute("select name from cet.cet where zkzh=(%s)" % i)xm = cur.fetchone()[0]print "Name is " + xmsqltxt = "update cet.cet set leibie=(%s),zongfen=(%s),tingli=(%s),yuedu=(%s),xiezuo=(%s) WHERE zkzh=(%s)" % (  ss, m[0], m[1], m[2], m[3], i)cur.execute(sqltxt)conn.commit()cur.close()conn.close()

代碼說明:

  3.python連接數據庫代碼

  6.連接數據庫取得姓名部分

  9.這行我好無語啊,使用‘“+ss+”'這樣的寫法一直報錯,最終找了半天資料,這個寫法我不太喜歡,但是湊合著用吧。

  12.記得一定要提交事務?。?!commit()!??!不然是沒有效果的

四、使用代理服務器(保留以后寫)

  運行了一段時間之后,大概抓了幾百人的吧,然后就出現要求驗證碼了,解決辦法只能處理驗證碼或者使用代理服務器了,這部分繼續加強學習再弄出來了↖(^ω^)↗

五、源代碼和效果

# encoding=utf8import MySQLdbimport reimport timefrom selenium import webdriver# connect mysql,get zkxh and xmconn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='cet', port=3306, charset='utf8')cur = conn.cursor()curr = conn.cursor()url = 'http://www.chsi.com.cn/cet/query'def kaishi(i): print i, print " start" try: cur.execute("select name from cet.cet where zkzh=(%s)" % i) xm = cur.fetchone()[0] print "Name is " + xm driver = webdriver.PhantomJS(executable_path='D:/phantomjs-2.1.1-windows/phantomjs.exe') driver.get(url) driver.find_element_by_id('zkzh').send_keys(i) driver.find_element_by_id('xm').send_keys(xm) driver.find_elements_by_tag_name('form')[1].submit() driver.set_page_load_timeout(10) leibie = driver.find_element_by_xpath("//tr[3]/td[1]").text leibie2 = str(leibie.encode("utf-8")) ss = "" if leibie2.decode("utf-8") == '英語四級'.decode("utf-8"):  ss = 4 else:  ss = 6 # zongfen = driver.find_element_by_xpath("//tr[6]/th[1]").text # print zongfen # print "====" chuli = driver.find_element_by_xpath("//tr[6]/td[1]").text print chuli chuli2 = str(chuli.encode("utf-8")) m = re.findall(r'(/w*[0-9]+)/w*', chuli2) sqltxt = "update cet.cet set leibie=(%s),zongfen=(%s),tingli=(%s),yuedu=(%s),xiezuo=(%s) WHERE zkzh=(%s)" % (  ss, m[0], m[1], m[2], m[3], i) cur.execute(sqltxt) conn.commit() print str(i) + " finish" except Exception, e: print e driver.close() time.sleep(10) kaishi(i)# for j1 in range(1201351511001, 1201351512154):for j1 in range(1201351511007, 1201351512154): for j2 in range(0, 3): for j3 in range(0, 10):  j = str(j1) + str(j2) + str(j3)  if str(j2) + str(j3) == "00":  print "0.0"  elif str(j2) + str(j3) == "29":  kaishi(str(j1) + str(j2) + str(j3))  j4 = str(j1) + "30"  kaishi(j4)  else:  kaishi(j)print "END!!!"cur.close()conn.close()

python動態網頁批量爬取

總結:python的字符串處理細節真的很重要,動不動就輸出錯誤,還有IDE的編碼不一樣,記得還有個系統編碼,字符編碼,環境編碼,數據庫編碼等等都要一致。

以上就是本文的全部內容,希望對大家的學習有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人午夜激情在线| 亚洲精品国产精品国自产观看浪潮| 亚洲综合小说区| 高清一区二区三区四区五区| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品aⅴ中文字幕乱码| 亚洲国产精品免费| 亚洲性xxxx| 亚洲男人的天堂网站| 国产成人免费av| 永久免费精品影视网站| 欧美日韩激情视频| 欧美电影在线免费观看网站| 国产精品亚洲一区二区三区| 91精品久久久久久久久久久久久久| 亚洲中国色老太| 国产精品美女在线观看| 91在线免费网站| 欧美一级高清免费| 国产成人+综合亚洲+天堂| 国产精品久久久久久久app| 91av在线免费观看视频| 日韩在线小视频| 国内精品久久影院| 欧美日韩在线观看视频小说| 中文字幕国产精品久久| 欧美性xxxxx| 精品欧美国产一区二区三区| 欧美激情在线有限公司| 97**国产露脸精品国产| 欧美精品精品精品精品免费| 国产欧美精品久久久| 久久亚洲精品国产亚洲老地址| 成人免费观看49www在线观看| 久久艹在线视频| 亚洲变态欧美另类捆绑| 欧美电影免费观看网站| 亚洲天堂网在线观看| 91免费看片在线| 亚洲电影天堂av| 疯狂欧美牲乱大交777| 97精品伊人久久久大香线蕉| 亚洲精品不卡在线| 日韩av中文在线| 午夜欧美大片免费观看| 国产精品自产拍在线观看中文| 欧美不卡视频一区发布| 在线丨暗呦小u女国产精品| 夜夜嗨av色一区二区不卡| 国产精品视频一区二区三区四| 国产精品成人观看视频国产奇米| 欧美激情在线狂野欧美精品| 岛国av一区二区在线在线观看| 亚洲最大激情中文字幕| 亚洲精品久久7777777| 亚洲高清不卡av| 国产精品第1页| 日韩av有码在线| 成人h猎奇视频网站| 国产亚洲一区二区精品| 国产精品偷伦免费视频观看的| 欧美在线视频导航| 亚洲第一视频在线观看| 成人伊人精品色xxxx视频| 青草热久免费精品视频| 日韩中文有码在线视频| 欧美激情成人在线视频| 亚洲日韩第一页| 久久人人爽国产| 亚洲欧洲一区二区三区久久| 一区二区三区在线播放欧美| 日韩有码视频在线| 亚洲激情视频在线播放| 久久综合九色九九| 国产日韩欧美在线播放| 国产精品偷伦免费视频观看的| 在线丨暗呦小u女国产精品| 日韩中文字幕精品视频| 日本不卡视频在线播放| 亚洲精品视频久久| 97婷婷涩涩精品一区| 成人妇女免费播放久久久| 日本精品中文字幕| 日韩中文视频免费在线观看| 国产在线视频欧美| 国产97在线|亚洲| 欧美另类交人妖| 秋霞av国产精品一区| 亚洲精品国精品久久99热| 久久久久国产一区二区三区| 国产国语videosex另类| 亚洲精品国产精品国产自| 亚洲一区二区三区sesese| 一区二区成人精品| 欧美成人午夜激情视频| 亚洲欧美精品在线| 深夜福利日韩在线看| 欧美激情在线观看视频| 亚洲美女av在线播放| 久久国产精彩视频| 日韩在线观看成人| 综合欧美国产视频二区| 亚洲在线观看视频| 91在线视频免费| 91精品国产综合久久久久久蜜臀| 欧美综合一区第一页| 亚洲影院色在线观看免费| 亚洲国产免费av| 欧美中文字幕视频在线观看| 亚洲网址你懂得| 伊人久久大香线蕉av一区二区| 国产精品视频一区二区三区四| 国产视频观看一区| 国产精品中文字幕在线观看| 国产欧美日韩高清| 欧美日韩在线视频一区| 狠狠爱在线视频一区| 日韩电影中文字幕av| 亚洲国产精久久久久久久| 久久综合免费视频影院| 亚洲女人被黑人巨大进入al| 亚洲欧美在线播放| 亚洲另类图片色| 亚洲人a成www在线影院| 成人免费网站在线观看| 亚洲的天堂在线中文字幕| 日韩中文字幕国产精品| 爽爽爽爽爽爽爽成人免费观看| 中文字幕免费国产精品| 国产视频观看一区| 亚洲精品久久久久中文字幕二区| 国产一区二区丝袜| 中文字幕在线视频日韩| 精品视频www| 国内精品久久久久久久久| 国产精品白丝av嫩草影院| 亚洲精品久久久久中文字幕二区| 久久久久一本一区二区青青蜜月| 精品人伦一区二区三区蜜桃网站| 日韩精品中文字幕有码专区| 国产精品你懂得| 92国产精品久久久久首页| 欧美巨猛xxxx猛交黑人97人| 亚洲一二三在线| 国产美女久久精品| 亚洲人线精品午夜| 91精品国产一区| 日韩久久免费电影| 日韩在线观看免费| 欧美日韩美女在线| 不卡在线观看电视剧完整版| 激情亚洲一区二区三区四区| 欧美激情一区二区三级高清视频| 久久成年人视频| 国产在线视频91| 欧美日韩一区免费| 久久影院在线观看| 日韩精品在线免费| 国产精品久久久久久久电影| 在线视频欧美日韩| 亚洲a区在线视频| 亚洲专区中文字幕| 91久久精品日日躁夜夜躁国产| 日韩av一卡二卡|