140 乱码处理 验证码, session

1 乱码处理:

import requests
from lxml import etree
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
url = 'http://pic.netbian.com/4kmeinv/'
response = requests.get(url=url,headers=headers)
# response.encoding = 'utf-8'
#检查请求到的源码数据的编码格式
print(response.encoding)
page_text = response.text

tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="slist"]/ul/li')
for li in li_list:
    img_src = li.xpath('./a/img/@src')[0]
    img_name = li.xpath('./a/img/@alt')[0]
#     img_name = img_name.encode('gbk').decode('utf-8')
    img_name = img_name.encode('ISO-8859-1').decode('gbk')
    print(img_src,img_name)

2 验证码 问题

# https://blog.csdn.net/hfutzhouyonghang/article/details/81009760
import requests
from urllib import request
from lxml import etree
url = "https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx"
headers = {
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
    "Connection":"close"
}
session = requests.Session()
#session对象和requests作用几乎一样,都可以进行请求的发送,并且请求发送的方式也是一致的,
#session进行请求的发送,如果会产生cookie的话,则cookie会自动被存储到session对象中


page_text = session.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
img_src = "https://so.gushiwen.org" + tree.xpath('//*[@id="imgCode"]/@src')[0]
page_text = session.get(url=img_src, headers=headers).content
with open("./gushiwen.jpg", "wb") as f:
    f.write(page_text)
img_code = get_code(1004, "./gushiwen.jpg")
print(img_code)
__VIEWSTATE = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
__VIEWSTATEGENERATOR = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]
login_url = "https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx"
data = {
    "__VIEWSTATE":__VIEWSTATE,
    "__VIEWSTATEGENERATOR":__VIEWSTATEGENERATOR,
    "from":"http://so.gushiwen.org/user/collect.aspx",
    "email":"[email protected]",
    "pwd":"gyh412724",
    "code":img_code,
    "denglu":"登录",
}
# 模拟登陆
# 使用Session对象提交请求,相当于在浏览器中连续操作网页,而如果直接使用```request.post()```,则相当没提交一次请求,则打开一个浏览器,我们在实际使用浏览器的经验告诉我们,这样是不行的。
login_content = session.post(url=login_url, data=data, headers=headers).content
with open('./gushiwen.html', "wb") as f:
    f.write(login_content)
    

3  云打码 :  'http://api.yundama.com/api.php'

  使用流程:

注册:普通用户和开发者用户
登录:
普通用户:查询余额
开发者用户:
创建一个软件:我的软件->添加一个新软件
下载示例代码:开发文档->下载最新调用DLL->HTTPPython示例代码

4  代理:   proxies:  https://jingyan.baidu.com/article/4f7d5712101fdd1a2119276c.html

url = 'https://www.baidu.com/s?wd=ip'
page_text = requests.get(url=url,headers=headers,proxies={'https':'103.110.184.149:55133'}).text

with open('./ip.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

   a : 代理的基本原理:

      代理实际上指的就是代理服务器,英文叫作proxy server,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在我们正常请求一个网站时,是发送了请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中Web服务器识别出的真实IP就不再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理。

   b : 代理的作用:

    1)  突破自身IP访问限制,访问一些平时不能访问的站点。

    2) 访问一些单位或团体内部资源:比如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。

    3) 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。

    4) 隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。对于爬虫来说,我们用代理就是为了隐藏自身IP,防止自身的IP被封锁。

猜你喜欢

转载自www.cnblogs.com/gyh412724/p/10246042.html
今日推荐