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被封锁。