国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python動態網頁批量爬取

2019-11-25 16:56:28
字體:
來源:轉載
供稿:網友

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

                  

網站的代碼如下:

<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,好了,填寫表單和結果如下:

                         

 

但是,點擊查看源代碼之后發現,沒有成績,即代碼仍是上面那個,之后按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("http://tr[3]/td[1]").textprint driver.find_element_by_xpath("http://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連接部分。

 數據庫代碼如下:

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()!!!不然是沒有效果的

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

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

主站蜘蛛池模板: 合水县| 宜黄县| 宣化县| 门头沟区| 江北区| 乌鲁木齐市| 通许县| 乌兰县| 聂拉木县| 阿克苏市| 井陉县| 富宁县| 叶城县| 金昌市| 五大连池市| 湘乡市| 赤峰市| 通渭县| 南陵县| 威远县| 常州市| 宣汉县| 汉中市| 保定市| 康平县| 宜阳县| 中山市| 西吉县| 徐水县| 白朗县| 昌邑市| 华容县| 新干县| 长阳| 平定县| 鹤庆县| 诸城市| 当阳市| 永顺县| 九龙县| 通许县|