成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python簡(jiǎn)單post信息

xuxueli / 838人閱讀

摘要:搞清楚了的信息后,我們就可以寫(xiě)代碼來(lái)自動(dòng)提交信息了。里面存的就是要的信息,其中賬號(hào)和密碼我用代替了。若不是一種數(shù)據(jù)類型或者由數(shù)據(jù)類型構(gòu)成的元組,將引發(fā)一個(gè)異常。

從自己別的博客搬過(guò)來(lái)的,很久之前的文章,正好放在專欄Python基礎(chǔ)知識(shí)里~不知道對(duì)別人有沒(méi)有用,希望不會(huì)辣眼睛哈哈~

最近學(xué)了點(diǎn)關(guān)于python的網(wǎng)絡(luò)爬蟲(chóng)的知識(shí),簡(jiǎn)單記錄一下,這里主要用到了requests庫(kù)和BeautifulSoup庫(kù)

Requests is an elegant and simple HTTP library for Python, built for human beings.

Beautiful Soup?is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers hours or days of work.

以上是兩個(gè)庫(kù)的介紹,鏈接是文檔信息

1、示例頁(yè)面

這里我利用東北大學(xué)的圖書(shū)館的登陸頁(yè)面來(lái)實(shí)現(xiàn)我們的爬蟲(chóng)功能(ps:沒(méi)錯(cuò),博主是東北大學(xué)的學(xué)生..所以我有賬號(hào)密碼),沒(méi)有賬號(hào)密碼也沒(méi)有關(guān)系,原理都是差不多的,之所以找這個(gè)頁(yè)面,是因?yàn)檫@個(gè)頁(yè)面沒(méi)有驗(yàn)證碼,能夠簡(jiǎn)單一些,而且像學(xué)校的這種頁(yè)面一般比較簡(jiǎn)單,方便操作

2、簡(jiǎn)單分析

首先我用的賬戶和密碼登陸進(jìn)了東北大學(xué)圖書(shū)館,我使用的是chrome瀏覽器,打開(kāi)開(kāi)發(fā)者模式,我們來(lái)看看我們提交了哪些信息。

登陸進(jìn)去后,按下F12打開(kāi)開(kāi)發(fā)者模式,在Network選項(xiàng)卡下面,我們找到這個(gè)文件,他的request方法是post,應(yīng)該就是我們要找的文件了,拉到最下面看到Form Data,紅色框出就是我們登陸時(shí)提交的信息了,一共五個(gè)部分,畫(huà)紅線的地方是賬號(hào)和密碼。搞清楚了post的信息后,我們就可以寫(xiě)代碼來(lái)自動(dòng)提交信息了。

登陸部分搞清楚了,接下就要分析要抓取的信息了,現(xiàn)在我要抓取我的

外借

借閱歷史列表

預(yù)約請(qǐng)求

要抓取這三個(gè)數(shù)據(jù),如上圖所示,我當(dāng)前外借1本書(shū),借閱過(guò)65本書(shū),預(yù)約請(qǐng)求為0,現(xiàn)在的目的是將這些數(shù)據(jù)抓取出來(lái),我們按下F12來(lái)查看網(wǎng)頁(yè)的源代碼,分析我們應(yīng)該抓取哪一部分。

如上圖所示,一步步找到了數(shù)據(jù)所在的標(biāo)簽,我發(fā)現(xiàn)數(shù)據(jù)都在id=history這個(gè)標(biāo)簽下,所以可以先找到這個(gè)標(biāo)簽,然后再找tr標(biāo)簽,然后就能找到td標(biāo)簽里的數(shù)據(jù)了。

3、實(shí)現(xiàn)的功能

自動(dòng)登陸

抓取頁(yè)面上的一些信息,并在控制臺(tái)輸出

4、代碼部分 4.1、post數(shù)據(jù)的部分

首先貼上這部分的代碼

def getHTMLText(url):
    try:
        kv = {"user-agent": "Mozilla/5.0"}
        mydata = {"func":"login-session", "login_source":"bor-info", "bor_id": "***", "bor_verification": "***","bor_library":"NEU50"}
        re = requests.post(url, data=mydata, headers=kv)
        re.raise_for_status()
        re.encoding = re.apparent_encoding
        return re.text
    except:
        print("異常")
        return""

代碼如上,我們來(lái)分析一下

kv是為了模擬瀏覽器而定義的字典,因?yàn)橛行┚W(wǎng)站如果識(shí)別出是爬蟲(chóng)的話,會(huì)拒絕訪問(wèn),所以這里可以修改headers的信息來(lái)模擬瀏覽器登陸。

mydata里面存的就是要post的信息,其中賬號(hào)和密碼我用*代替了。

requests.post()就是向指定的url 提交數(shù)據(jù),關(guān)于requests在網(wǎng)上都能搜的到,就不贅述了。

re.raise_for_status()這個(gè)的含義是如果訪問(wèn)失敗的話,就會(huì)丟出異常。

re.encoding = re.apparent_encoding修改編碼,保證中文能被正確的解析。

這里采用try except的結(jié)構(gòu),為了程序的健壯性考慮,讓程序在錯(cuò)誤的時(shí)候不至于崩潰。

最后返回我們新的頁(yè)面的text。

4.2、抓取數(shù)據(jù)部分

首先貼上代碼

def fillBookList(booklist, html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find(id="history").descendants:
        if isinstance(tr, bs4.element.Tag):
            temp = tr.find_all("td")
            if len(temp)>0:
                booklist.append(temp[1].string.strip())
                booklist.append(temp[3].string.strip())
                booklist.append(temp[5].string.strip())
                break

參數(shù)分別是我們要填充的列表和目標(biāo)頁(yè)面

創(chuàng)建一個(gè)BeautifulSoup的對(duì)象

在整個(gè)頁(yè)面中查找id=history的標(biāo)簽,然后遍歷其所有子孫標(biāo)簽

在遍歷的過(guò)程中,標(biāo)簽的子標(biāo)簽可能是字符串類型,我們要過(guò)濾掉這些,所以用了isinstance(tr, bs4.element.Tag)

isinstance 的用法:
語(yǔ)法:
isinstance(object, classinfo)
其中,object 是變量,classinfo 是類型(tuple,dict,int,float,list,bool等) 和 class類若參數(shù) object 是 classinfo 類的實(shí)例,或者 object 是 classinfo 類的子類的一個(gè)實(shí)例, 返回 True。 若 object 不是一個(gè)給定類型的的對(duì)象, 則返回結(jié)果總是False。若 classinfo 不是一種數(shù)據(jù)類型或者由數(shù)據(jù)類型構(gòu)成的元組,將引發(fā)一個(gè) TypeError 異常。

在標(biāo)簽中尋找所有td標(biāo)簽,觀察源代碼發(fā)現(xiàn),第一個(gè)td標(biāo)簽列表就是我們要的,所以一旦找到我們要的信息以后,就停止查找,并就信息存在booklist里面

4.3、打印信息

貼上代碼

def printUnivList(booklist):
    print("{:^10}	{:^6}	{:^10}".format("外借","借閱歷史列表","預(yù)約請(qǐng)求"))
    print("{:^10}	{:^6}	{:^10}".format(booklist[0],booklist[1],booklist[2])

這部分很簡(jiǎn)單就不說(shuō)了

4.4、主函數(shù)

貼上代碼

def main():
    html = getHTMLText("http://202.118.8.7:8991/F/-?func=bor-info")
    booklist = []
    fillBookList(booklist, html)
    printUnivList(booklist)
5、測(cè)試


成功的在控制臺(tái)打印出了我們要的信息!

6、完整的代碼
import requests
from bs4 import  BeautifulSoup
import  bs4
def getHTMLText(url):
    try:
        kv = {"user-agent": "Mozilla/5.0"}
        mydata = {"func":"login-session", "login_source":"bor-info", "bor_id": "***", "bor_verification": "***","bor_library":"NEU50"}
        re = requests.post(url, data=mydata, headers=kv)
        re.raise_for_status()
        re.encoding = re.apparent_encoding
        return re.text
    except:
        print("異常")
        return""
def fillBookList(booklist, html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find(id="history").descendants:
        if isinstance(tr, bs4.element.Tag):
            temp = tr.find_all("td")
            if len(temp)>0:
                booklist.append(temp[1].string.strip())
                booklist.append(temp[3].string.strip())
                booklist.append(temp[5].string.strip())
                break
def printUnivList(booklist):
    print("{:^10}	{:^6}	{:^10}".format("外借","借閱歷史列表","預(yù)約請(qǐng)求"))
    print("{:^10}	{:^6}	{:^10}".format(booklist[0],booklist[1],booklist[2]))
def main():
    html = getHTMLText("http://202.118.8.7:8991/F/-?func=bor-info")
    booklist = []
    fillBookList(booklist, html)
    printUnivList(booklist)
main()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101536.html

相關(guān)文章

  • 使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片上傳存儲(chǔ)服務(wù)

    摘要:地址使用實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的圖片上傳服務(wù)設(shè)計(jì)初衷對(duì)于圖片的存儲(chǔ)有很多選擇一般采用云服務(wù)如七牛又拍等但是國(guó)內(nèi)的服務(wù)像七牛自定義域名竟然需要域名備案當(dāng)初就是因?yàn)閭浒嘎闊┎胚x擇國(guó)外的而且浪費(fèi)了我十塊錢而我又想像七牛一樣可以直接在本地就可以上傳圖片找 GitHub地址: https://github.com/honmaple/maple-file 使用flask實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的圖片上傳服務(wù) 設(shè)計(jì)...

    yzd 評(píng)論0 收藏0
  • python抓一點(diǎn)數(shù)據(jù)回來(lái)

    摘要:背景分析至此,下一步要解決的問(wèn)題就是完成一次獨(dú)立的請(qǐng)求,并解析得到目標(biāo)數(shù)據(jù)。上方地址欄的網(wǎng)址是請(qǐng)求的入口,中間圓角方框中的格式天津則是請(qǐng)求參數(shù)。當(dāng)我看到中的天津時(shí),非常開(kāi)心,因?yàn)槲艺业搅苏?qǐng)求的入口。 概要 背景描述 網(wǎng)站和http請(qǐng)求分析 IP受限的問(wèn)題 1. 背景描述 大為軟件公司于2001年9月在保定國(guó)家高新技術(shù)產(chǎn)業(yè)開(kāi)發(fā)區(qū)注冊(cè),公司致力于中國(guó)、日本知識(shí)產(chǎn)權(quán)軟件的研究開(kāi)發(fā),立志成...

    snifes 評(píng)論0 收藏0
  • Python 從零開(kāi)始爬蟲(chóng)(零)——爬蟲(chóng)思路&requests模塊使用

    摘要:定制篩選器,對(duì)內(nèi)容進(jìn)行篩選重點(diǎn)。審查元素這是瀏覽器自帶的工具,提供抓包和檢查網(wǎng)頁(yè)源碼的功能,供使用者分析網(wǎng)頁(yè)。超時(shí)設(shè)置,如果服務(wù)器在指定秒數(shù)內(nèi)沒(méi)有應(yīng)答,拋出異常,用于避免無(wú)響應(yīng)連接,整形或浮點(diǎn)數(shù)。返回連接狀態(tài),正常。 前言 python 3.6 ?。?本爬蟲(chóng)系列是面對(duì)有Python語(yǔ)法基礎(chǔ)的讀者寫(xiě)的,如果你沒(méi)學(xué)過(guò)python,emmmm.....也沒(méi)關(guān)系,你或許能從每篇文章中學(xué)到一些...

    YanceyOfficial 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---24、requests:基本使用

    摘要:上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)使用分析協(xié)議下一篇文章在前面一節(jié)我們了解了的基本用法,但是其中確實(shí)有不方便的地方。發(fā)送之后,得到的自然就是,在上面的實(shí)例中我們使用了和獲取了內(nèi)容,不過(guò)還有很多屬性和方法可以獲取其他的信息,比如狀態(tài)碼等信息。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---23、使用Urllib:分析Robots協(xié)議下一篇文章: 在前面一節(jié)我們了解了 Urllib 的基本用法,但是其中...

    lentrue 評(píng)論0 收藏0
  • Django 博客開(kāi)發(fā)教程 12 - 評(píng)論

    摘要:創(chuàng)建了數(shù)據(jù)庫(kù)模型就要遷移數(shù)據(jù)庫(kù),遷移數(shù)據(jù)庫(kù)的命令也在前面講過(guò)。如果表單對(duì)應(yīng)有一個(gè)數(shù)據(jù)庫(kù)模型例如這里的評(píng)論表單對(duì)應(yīng)著評(píng)論模型,那么使用類會(huì)簡(jiǎn)單很多,這是為我們提供的方便。表明這個(gè)表單對(duì)應(yīng)的數(shù)據(jù)庫(kù)模型是類。 創(chuàng)建評(píng)論應(yīng)用 相對(duì)來(lái)說(shuō),評(píng)論其實(shí)是另外一個(gè)比較獨(dú)立的功能。Django 提倡,如果功能相對(duì)比較獨(dú)立的話,最好是創(chuàng)建一個(gè)應(yīng)用,把相應(yīng)的功能代碼寫(xiě)到這個(gè)應(yīng)用里。我們的第一個(gè)應(yīng)用叫 blog...

    wangbinke 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<