python--实践--模拟浏览器(http)登陆

#方法一:直接使用coookies登陆,此方法需要提前在浏览器中使用账号密码登陆后,获取浏览器中的cookies,在构造的请求中携带这个cookies(缺点是有时效性)。

#方法二:通过账号密码(From data)登陆,在登陆后获得其中的cookies,之后的对需要登陆的页面操作,只需要携带这个cookies即可

 

 1 #以下代码是利用方法1
 2 # -*- coding: utf-8 -*-
 3 import requests;
 4 import sys;
 5 import io;
 6 #重点:标准解析库
 7 from bs4 import BeautifulSoup;
 8 sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8'); #改变标准输出的默认编码
 9 #根据cookies访问后台
10 url = 'http://域名/other/other.comment.wall.php?ac=l&id=&fid=&uid=&title=&source=0&status=0&b_time=&e_time=';
11 
12 #浏览器登录后得到的cookie,也就是刚才复制的字符串
13 cookie_str = r'PHPSESSID=9f20c6bb676841f38aee8589aceb5c7f; username=zhonghuihong; password=XXX';
14 #把cookie字符串处理成字典,以便接下来使用
15 cookies = {};
16 for line in cookie_str.split(';'):
17 key, value = line.split('=', 1);
18 cookies[key] = value;
19 #设置请求头,直接复制即可
20 headers = {'User-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'};
21 疑问:请求头header是不是必须要加
22 搜罗网上的答复:
23 ①、不加,直接裸着请求url,似乎也没有报错,自己尝试也是这样
24 ②、防止封ip,加上准没错
25 ③、禁止反扒机制,输出的text信息中会出现抱歉,无法访问等字眼,这就是禁止爬取(headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据)
26 ④、作为一个良好的习惯,最好都要加上
27  
28 疑问二:请求头里面已经含有cookies,请求时是否还要重复添加一个cookies=cookies参数
29 根据自己的实践:不需要重复添加
30  
31  
32 疑问三:为什么访问android端的接口基本不用提前设置header
33 header里面是手机端信息,通过手机端页面去爬不会那么容易被封(这个是询问网友来着,至今不知道原因),根据目前实践确实不需要
34  
35  
36 #在发送get请求时带上请求头和cookies()
37 resp = requests.get(url, headers = headers, cookies = cookies);
38 html_resp=resp.content.decode('UTF-8'); 
39 #print(resp.content.decode('utf-8'));
40 soup_string = BeautifulSoup(html_resp, 'html.parser');
41 soup_table=soup_string.find(attrs={'class':'table table-striped table-bordered table-hover'});
42 #print(soup_table);
43 soup_str=soup_table.findAll(attrs={'style':'text-align:center;vertical-align:middle;word-break:break-all; word-wrap:break-all;'});
44 print(soup_str);
45 #for soup in soup_str:
46 #print(soup.string);
47 #book_div = soup_string.find(attrs={"id":"book"})
48 #book_a = book_div.findAll(attrs={"class":"title"})
49 #for book in book_a:
50 #print book.string
51 #print(soup_string);

 

转载于:https://www.cnblogs.com/shenyexiaoqingxin/p/10370261.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值