recherche

Maison  >  Questions et réponses  >  le corps du texte

网页爬虫 - python requests库模拟登陆学校教务网遇到数据库繁忙

第一次写爬虫也是第一次在SF提问题=。=
思路就是get登陆下网址获得一个cookie然后带着cookie以post方式登陆
headers伪造和浏览器一模一样
服务器总是返回一个数据库繁忙的界面,找了很久也不知道原因在哪

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>

s = requests.Session()

x = s.get(loginUrl)

r = s.post(postUrl,data=

{

'zjh':'********',

'mm':'********',

'v_yzm':CodeRecognition()

}

,headers = headers)

 

 

print(x.headers)

print(x.request.headers)

print(r.headers)

print(r.request.headers)

 

 

f=file("cookie.txt","w+")

f.write(r.text)

f.close()

</code>

CodeRecognition() 这个验证码识别模块源码太长就不贴出来了,就是先用urllib库访问验证码地址 http://222.195.242.222:8080/validateCodeAction.do 把图片下载到本地,然后对图像二值化灰度等处理后调用Tesseract-OCR识别并返回

补充内容:在chrome中用EditThisCookie管理工具删掉网站的cookie然后刷新页面,登录会失败,返回数据库繁忙。但是我用session先访问网站返回给了我一个setcookie,然后带着这个cookie post表单为什么还是会有这个错误呢?

这是在sublime3中运行打印出的内容:

1

2

3

4

5

6

7

<code>{'Transfer-Encoding': 'chunked', 'Set-Cookie': 'JSESSIONID=bhazvcnoUA-YYbw_WQZsv; path=/', 'Keep-Alive': 'timeout=8, max=500', 'Server': 'Apache', 'Connection': 'Keep-Alive', 'Cache-Control': 'private', 'Date': 'Sun, 15 May 2016 09:06:53 GMT', 'Content-Type': 'text/html; charset=GBK'}

 

{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.9.1'}

 

{'Transfer-Encoding': 'chunked', 'Keep-Alive': 'timeout=8, max=499', 'Server': 'Apache', 'Connection': 'Keep-Alive', 'Date': 'Sun, 15 May 2016 09:06:53 GMT', 'Content-Type': 'text/html; charset=GBK'}

 

{'Origin': 'http://222.195.242.222:8080', 'Content-Length': '77', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'Accept': '*/*', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36', 'Host': '222.195.242.222:8080', 'Referer': 'http://222.195.242.222:8080/', 'Cookie': 'JSESSIONID=bhazvcnoUA-YYbw_WQZsv', 'Content-Type': 'application/x-www-form-urlencoded'}</code>

高洛峰高洛峰2889 Il y a quelques jours644

répondre à tous(5)je répondrai

  • 天蓬老师

    天蓬老师2017-04-17 18:03:26

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    <code>import requests

     

    cookies = {}

     

    headers = {

        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '

                      'Chrome/50.0.2661.86 Safari/537.36'

    }

     

     

    def get_code():

        url = 'http://222.195.242.222:8080/validateCodeAction.do'

        resp = requests.get(url, headers=headers)

        cookies['JSESSIONID'] = resp.cookies.get('JSESSIONID')

        with open('code.jpg', 'wb') as img:

            img.write(resp.content)

     

     

    def login(username, password, code):

        url = 'http://222.195.242.222:8080/loginAction.do'

        form = {

            'zjh1': '',

            'tips': '',

            'lx': '',

            'evalue': '',

            'eflag': '',

            'fs': '',

            'dzslh': '',

            'zjh': username,

            'mm': password,

            'v_yzm': code

        }

        resp = requests.post(url, headers=headers, data=form, cookies=cookies)

     

     

    def get_info():

        url = 'http://222.195.242.222:8080/xjInfoAction.do?oper=xjxx'

        resp = requests.get(url, headers=headers, cookies=cookies)

        print(resp.text)

     

     

    if __name__ == '__main__':

        username = input(input your username: );

        password = input(input your password: );

        get_code()

        code = input('input the code: ')

        login(username, password, code)

        get_info()</code>

    Le code ci-dessus peut obtenir les données
    L'idée de base est
    Lorsque GET obtient le code de vérification, le serveur renvoie un cookie
    Prenez simplement ce cookie, puis POSTez le formulaire
    Je viens de J'étais en train d'écrire le nom de l'école récemment. Le robot d'exploration de ce site Web a rencontré et résolu de nombreux problèmes
    Celui-ci est plus facile que celui de notre école...

    répondre
    0
  • 黄舟

    黄舟2017-04-17 18:03:26

    Le système d'administration académique de votre école est vraiment...
    Propriétaire, vous devez être patient lorsque vous travaillez comme robot d'exploration. Je n'ai rien à faire aujourd'hui, alors je vous ai aidé à y jeter un œil. le code que j'ai pu demander avec succès. Pour une interface qui ne parvient toujours pas à appeler, vous devez d'abord vous demander si vos données clés sont correctes mais renvoient toujours une erreur étrange, vous devez alors considérer d'autres champs. Vous pouvez le voir en déboguant dans le navigateur. , POST Il y a plusieurs autres champs vides dans les données de la requête. Bien sûr, cela peut effectivement n'avoir aucun sens pour le jugement en arrière-plan, mais cela ne signifie pas qu'ils n'ont tous aucun sens, donc il y en a. Si c'est faux, vous devez l'ajouter et essayer. Bien sûr, si les champs dans les données sont corrects et que c'est toujours faux, vous devez considérer les informations de l'en-tête HTTP. Les principales sont Origine, Referer et User. -Agent. Si cela ne fonctionne toujours pas, il est très probable que ce soit le cas. Les informations contenues dans le champ Cookie n'ont pas été ajoutées, comme indiqué ci-dessous. Après avoir ajouté les champs encore et encore, j'ai finalement découvert qu'il s'agissait d'un cookie. problème

    1

    <code>r = requests.post('http://222.195.242.222:8080/loginAction.do', data={'zjh': '201406478', 'mm': '201406478', 'v_yzm': 'v2tt', 'tips': '', 'zjh1': '', 'lx': '', 'evalue': '', 'eflag': '', 'fs': '', 'dzslh': ''}, headers={'Origin': 'http://222.195.242.222:8080', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36', 'Referer': 'http://222.195.242.222:8080/', 'Accept-Encoding': 'Accept-Encoding: gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2', 'Upgrade-Insecure-Requests': '1', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive'}, cookies={'JSESSIONID': 'daeIK_SalL_r8cpMsrYsv'})</code>

    À ce moment, la base de données n'est plus occupée, mais la page redirigée après l'erreur de code de vérification.

    Enfin, le crawl demande vraiment de la patience, surtout pour les sites dotés de stratégies anti-crawling

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-17 18:03:26

    Rappel chaleureux, le mot de passe de votre compte a été exposé.

    répondre
    0
  • 高洛峰

    高洛峰2017-04-17 18:03:26

    Haha, est-ce que quelqu'un s'est connecté avec ce compte ?

    répondre
    0
  • PHPz

    PHPz2017-04-17 18:03:26

    Aucun traitement de mosaïque.

    répondre
    0
  • Annulerrépondre