亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1794 0

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

python動態(tài)網(wǎng)頁批量爬取_第1張圖片 ??????????????????

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

            
準(zhǔn)考證號: 請輸入15位準(zhǔn)考證號
姓名: 姓名超過3個(gè)字,可只輸入前3個(gè)
?

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

????????????????????????? python動態(tài)網(wǎng)頁批量爬取_第2張圖片

? python動態(tài)網(wǎng)頁批量爬取_第3張圖片

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

            

姓名:
XXXX

學(xué)校:
XXXXXX

考試類別:
英語四級

準(zhǔn)考證號:
120135151100101

考試時(shí)間:
2015年06月總分:
            
              403 
            
            
聽力: 132
閱讀: 147
寫作與翻譯: 124

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

前言: 使用過BeautifulSoup爬取過,但是BeautifulSoup是爬取不了動態(tài)網(wǎng)頁的,上各種論壇找各種資料,用了n種東西,scapy,pyqt等等,走了真心不少彎路,不是不行,應(yīng)該是我不會用,最終用了selenium和phantomjs,這兩個(gè)應(yī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()


          

代碼說明:

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

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

二、字符處理

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

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

代碼說明:

  1.查看姓名

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

打印之后為:

            
姓名
聽力
閱讀
寫作

          

  之后要對分?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ù)庫

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

python動態(tài)網(wǎng)頁批量爬取_第4張圖片

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

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


          

代碼說明:

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

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

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

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

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

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

五、源代碼和效果

            
# 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") == '英語四級'.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()


          

python動態(tài)網(wǎng)頁批量爬取_第5張圖片

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色另类| 欧美一区二区三区网站 | 国产梦呦精品 | 亚洲va国产日韩欧美精品色婷婷 | 久久这里是精品 | 九九精品久久久久久噜噜 | 一级特级女人18毛片免费视频 | 亚洲国产欧美久久香综合 | 成人日韩视频 | 国产精品第| 色综合久久天天综合绕观看 | 日韩欧美在线不卡 | 天天爽夜夜爽精品视频一 | 久草久草视频 | 国产欧美在线观看精品一区二区 | 美国毛片aaa在线播放 | 精品视频一区二区三区 | 国产精品久久做爰 | 第九色激情 | 九九精品久久久久久久久 | 免费观看成人羞羞视频网站观看 | 不卡在线播放 | 夜色资源站www国产在线资源 | 国产精品原创永久在线观看 | 亚洲综合色吧 | 日韩a无吗一区二区三区 | 91视频老司机 | 欧美日韩在线观看免费 | 精品日本久久久久久久久久 | 一级毛片一级毛片免费毛片 | 国内亚州视频在线观看 | 中文无码久久精品 | 999视频在线观看 | 好好的日com欧美 | 中文字幕一区在线播放 | 老师邪恶影院a啦啦啦影院 老师在办公室被躁到白浆 老湿机午夜影院 | 四虎影视在线影院在线观看观看 | 欧美一级毛片不卡免费观看 | 国产美女在线免费观看 | 午夜在线一区 | 国产高清一区二区三区免费视频 |