欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python動(dòng)態(tài)網(wǎng)頁(yè)批量爬取

 更新時(shí)間:2016年02月14日 08:49:36   投稿:lijiao  
這篇文章主要介紹了python動(dòng)態(tài)網(wǎng)頁(yè)批量爬取的方法,主要針對(duì)四六級(jí)成績(jī)批量爬取,感興趣的小伙伴們可以參考一下

四六級(jí)成績(jī)查詢網(wǎng)站我所知道的有兩個(gè):學(xué)信網(wǎng)(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),這兩個(gè)網(wǎng)站采用的都是動(dòng)態(tài)網(wǎng)頁(yè)。我使用的是學(xué)信網(wǎng),好了,網(wǎng)站截圖如下:

                  

網(wǎng)站的代碼如下:

<form method="get" name="form1" id="form1" action="/cet/query">

<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr><td align="right">準(zhǔn)考證號(hào):</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">請(qǐng)輸入15位準(zhǔn)考證號(hào)</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">姓名超過(guò)3個(gè)字,可只輸入前3個(gè)</td>
</tr>

<tr><td align="center">&nbsp;</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,好了,填寫(xiě)表單和結(jié)果如下:

                         

 

但是,點(diǎn)擊查看源代碼之后發(fā)現(xiàn),沒(méi)有成績(jī),即代碼仍是上面那個(gè),之后按F12查看代碼:

<TBODY><TR>
<TH>姓名:</TH>
<TD>XXXX</TD></TR>
<TR>
<TH>學(xué)校:</TH>
<TD>XXXXXX</TD></TR>
<TR>
<TH>考試類別:</TH>
<TD>英語(yǔ)四級(jí)</TD></TR>
<TR>
<TH>準(zhǔn)考證號(hào):</TH>
<TD>120135151100101</TD></TR>
<TR>
<TH>考試時(shí)間:</TH>
<TD>2015年06月</TD></TR>總分:</TH><TD class=fontBold vAlign="top"><SPAN class=colorRed>403 </SPAN><BR><SPAN class=color666>聽(tīng)力:</SPAN> 132 <BR><SPAN class=color666>閱讀:</SPAN> 147 <BR><SPAN class=color666>寫(xiě)作與翻譯:</SPAN> 124 </TD></TR>

該代碼顯示了成績(jī),可以知道,該網(wǎng)站使用的是動(dòng)態(tài)網(wǎng)頁(yè),用的JavaScript或者Ajax.js還是其他的我就不知道了0.0。上面為需求。 

前言:使用過(guò)BeautifulSoup爬取過(guò),但是BeautifulSoup是爬取不了動(dòng)態(tài)網(wǎng)頁(yè)的,上各種論壇找各種資料,用了n種東西,scapy,pyqt等等,走了真心不少?gòu)澛?,不是不行,?yīng)該是我不會(huì)用,最終用了selenium和phantomjs,這兩個(gè)應(yīng)該也是目前最流行的爬蟲(chóng)模塊了吧。

一、導(dǎo)入selenium和phantomjs

from selenium import webdriver

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()

代碼說(shuō)明:

  3.selenium可以加載很多驅(qū)動(dòng),比如Chrome、FireFox等,這里需要有這兩個(gè)瀏覽器和驅(qū)動(dòng)才行,折騰了一下,網(wǎng)上說(shuō)Phantomjs是較好的了

  5、6、7分別是準(zhǔn)考證號(hào),姓名和提交

二、字符處理

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

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

代碼說(shuō)明:

  1.查看姓名

  2.查看分?jǐn)?shù)及其具體成績(jī)

打印之后為:

姓名
聽(tīng)力
閱讀
寫(xiě)作

  之后要對(duì)分?jǐn)?shù)進(jìn)行字符串處理,選取各部分的數(shù)字,這里我們采用re模塊:

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


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

三、數(shù)據(jù)庫(kù)

  我們學(xué)校也不知說(shuō)很渣還是人性化,反正公布了全校的四六級(jí)準(zhǔn)考證號(hào),當(dāng)然,是excel的,需要導(dǎo)入mysql數(shù)據(jù)庫(kù),打開(kāi)Excel之后,我發(fā)現(xiàn)微軟大法和Oracle真是牛,Excel365居然有mysql workbench連接部分。

 數(shù)據(jù)庫(kù)代碼如下:

import MySQLdb

conn = 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 " + xm
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()
cur.close()
conn.close()

代碼說(shuō)明:

  3.python連接數(shù)據(jù)庫(kù)代碼

  6.連接數(shù)據(jù)庫(kù)取得姓名部分

  9.這行我好無(wú)語(yǔ)啊,使用‘“+ss+”'這樣的寫(xiě)法一直報(bào)錯(cuò),最終找了半天資料,這個(gè)寫(xiě)法我不太喜歡,但是湊合著用吧。

  12.記得一定要提交事務(wù)?。。ommit()?。?!不然是沒(méi)有效果的

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

  運(yùn)行了一段時(shí)間之后,大概抓了幾百人的吧,然后就出現(xiàn)要求驗(yàn)證碼了,解決辦法只能處理驗(yàn)證碼或者使用代理服務(wù)器了,這部分繼續(xù)加強(qiáng)學(xué)習(xí)再弄出來(lái)了↖(^ω^)↗

五、源代碼和效果

# encoding=utf8

import MySQLdb
import re
import time

from selenium import webdriver

# connect mysql,get zkxh and xm
conn = 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("http://tr[3]/td[1]").text
 leibie2 = str(leibie.encode("utf-8"))
 ss = ""
 if leibie2.decode("utf-8") == '英語(yǔ)四級(jí)'.decode("utf-8"):
  ss = 4
 else:
  ss = 6
 # zongfen = driver.find_element_by_xpath("http://tr[6]/th[1]").text
 # print zongfen
 # print "===="
 chuli = driver.find_element_by_xpath("http://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()

總結(jié):python的字符串處理細(xì)節(jié)真的很重要,動(dòng)不動(dòng)就輸出錯(cuò)誤,還有IDE的編碼不一樣,記得還有個(gè)系統(tǒng)編碼,字符編碼,環(huán)境編碼,數(shù)據(jù)庫(kù)編碼等等都要一致。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • python 字符串格式化的示例

    python 字符串格式化的示例

    這篇文章主要介紹了python 字符串格式化的示例,幫助大家更好的理解和使用python處理字符串,感興趣的朋友可以了解下
    2020-09-09
  • Python中最好用的命令行參數(shù)解析工具(argparse)

    Python中最好用的命令行參數(shù)解析工具(argparse)

    這篇文章主要介紹了Python中最好用的命令行參數(shù)解析工具(argparse),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • OpenCV-PS擴(kuò)散毛玻璃效果的實(shí)現(xiàn)代碼

    OpenCV-PS擴(kuò)散毛玻璃效果的實(shí)現(xiàn)代碼

    PS的擴(kuò)散效果可以產(chǎn)生類似毛玻璃質(zhì)感的效果,使畫(huà)面有些毛毛的感覺(jué)。接下來(lái)通過(guò)本文給大家分享OpenCV-PS擴(kuò)散毛玻璃效果的實(shí)現(xiàn)代碼,一起看看吧
    2021-09-09
  • Python中最好用的json庫(kù)orjson用法詳解

    Python中最好用的json庫(kù)orjson用法詳解

    orjson是一個(gè)用于python的快速、正確的json庫(kù),它的基準(zhǔn)是 json最快的python庫(kù),具有全面的單元、集成和互操作性測(cè)試,下面這篇文章主要給大家介紹了關(guān)于Python中最好用的json庫(kù)orjson用法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯

    Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯

    這篇文章主要介紹了Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟

    python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟

    在數(shù)據(jù)科學(xué)項(xiàng)目中,數(shù)據(jù)預(yù)處理是最重要的事情之一,本文詳細(xì)給大家介紹python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟:拆分訓(xùn)練集和測(cè)試集,處理缺失值,處理分類特征和進(jìn)行標(biāo)準(zhǔn)化處理,需要的朋友可以參考下
    2023-06-06
  • python高級(jí)語(yǔ)法之閉包和裝飾器詳解

    python高級(jí)語(yǔ)法之閉包和裝飾器詳解

    這篇文章主要介紹了python高級(jí)語(yǔ)法之閉包和裝飾器詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Python如何使用標(biāo)準(zhǔn)庫(kù)tmpfile庫(kù)創(chuàng)建臨時(shí)文件

    Python如何使用標(biāo)準(zhǔn)庫(kù)tmpfile庫(kù)創(chuàng)建臨時(shí)文件

    這篇文章主要介紹了Python如何使用標(biāo)準(zhǔn)庫(kù)tmpfile庫(kù)創(chuàng)建臨時(shí)文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    PyMysql是Python中用于連接MySQL數(shù)據(jù)庫(kù)的一個(gè)第三方庫(kù),本文主要介紹了Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Python繪制loss曲線和準(zhǔn)確率曲線實(shí)例代碼

    Python繪制loss曲線和準(zhǔn)確率曲線實(shí)例代碼

    pytorch雖然使用起來(lái)很方便,但在一點(diǎn)上并沒(méi)有tensorflow方便,就是繪制模型訓(xùn)練時(shí)在訓(xùn)練集和驗(yàn)證集上的loss和accuracy曲線(共四條),下面這篇文章主要給大家介紹了關(guān)于Python繪制loss曲線和準(zhǔn)確率曲線的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評(píng)論