xml地图|网站地图|网站标签 [设为首页] [加入收藏]
微信退款证书使用c,python爬虫入门
分类:编程

描述

endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。

微信退款需要证书

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争...

语法

endswith()方法语法:

str.endswith(suffix[, start[, end]])

data为已封装好的xml数据

  • 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库。

  • 这个站点的运维小黎发现某个时间段请求量陡增,分析日志发现都是 IP(xxx.xxx.xxx.xxx)这个用户,并且 user-agent 还是 Python-urllib/2.7 ,基于这两点判断非人类后直接在服务器上封杀。

  • 小莫电影只爬了一半,于是也针对性的变换了下策略:1. user-agent 模仿百度("Baiduspider..."),2. IP每爬半个小时就换一个IP代理。

  • 小黎也发现了对应的变化,于是在服务器上设置了一个频率限制,每分钟超过120次请求的再屏蔽IP。 同时考虑到百度家的爬虫有可能会被误伤,想想市场部门每月几十万的投放,于是写了个脚本,通过 hostname 检查下这个 ip 是不是真的百度家的,对这些 ip 设置一个白名单。

  • 小莫发现了新的限制后,想着我也不急着要这些数据,留给服务器慢慢爬吧,于是修改了代码,随机1-3秒爬一次,爬10次休息10秒,每天只在8-12,18-20点爬,隔几天还休息一下。

  • 小黎看着新的日志头都大了,再设定规则不小心会误伤真实用户,于是准备换了一个思路,当3个小时的总请求超过50次的时候弹出一个验证码弹框,没有正确输入的话就把 IP 记录进黑名单。

  • 小莫看到验证码有些傻脸了,不过也不是没有办法,先去学习了图像识别(关键词 PIL,tesseract),再对验证码进行了二值化,分词,模式训练之后,总之最后识别了小黎的验证码(关于验证码,验证码的识别,验证码的反识别也是一个恢弘壮丽的斗争史...),之后爬虫又跑了起来。

  • 小黎是个不折不挠的好同学,看到验证码被攻破后,和开发同学商量了变化下开发模式,数据并不再直接渲染,而是由前端同学异步获取,并且通过 JavaScript 的加密库生成动态的 token,同时加密库再进行混淆。

  • 混淆过的加密库就没有办法了么?当然不是,可以慢慢调试,找到加密原理,不过小莫不准备用这么耗时耗力的方法,他放弃了基于 HttpClient的爬虫,选择了内置浏览器引擎的爬虫(关键词:PhantomJS,Selenium),在浏览器引擎运行页面,直接获取了正确的结果,又一次拿到了对方的数据。

  • 小黎:.....

Selenium

参数

  • suffix -- 该参数可以是一个字符串或者是一个元素。
  • start -- 字符串中的开始位置。
  • end -- 字符中结束位置。

具体怎么封装>打开

 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。

返回值

如果字符串含有指定的后缀返回True,否则返回False。

 1     public string get(string data) 
 2        {
 3             string cert = @"D:certificateapiclient_cert.p12"; //证书位置
 4             string password = "11100011";//证书密码
 5             string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";//请求地址
 6             ServicePointManager.ServerCertificateValidationCallback=new 
 7             RemoteCertificateValidationCallback(CheckValidationResult); 
 8             X509Certificate cer = new X509Certificate(cert, password); 
 9             HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url); 
10             webrequest.ClientCertificates.Add(cer);
11             byte[] bs = Encoding.UTF8.GetBytes(data);
12 
13             webrequest.Method = "POST";
14             webrequest.ContentType = "application/x-www-form-urlencoded";
15             webrequest.ContentLength = bs.Length;
16             //提交请求数据
17             Stream reqStream = webrequest.GetRequestStream();
18             reqStream.Write(bs, 0, bs.Length);
19             reqStream.Close();
20             //接收返回的页面,必须的,不能省略
21             WebResponse wr = webrequest.GetResponse();
22             System.IO.Stream respStream = wr.GetResponseStream();
23             System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("utf-8"));
24             string t = reader.ReadToEnd();
25             System.Web.HttpContext.Current.Response.Write(t);
26             wr.Close();
27 
28             return t;
29             
30 
31 
32             }
33 
34         private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
35         {
36             if (errors == SslPolicyErrors.None)
37                 return true;
38             return false;
39         }

Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

实例

以下实例展示了endswith()方法的实例:

#!/usr/bin/python3

Str='Runoob example....wow!!!'
suffix='!!'
print (Str.endswith(suffix))
print (Str.endswith(suffix,20))
suffix='run'
print (Str.endswith(suffix))
print (Str.endswith(suffix, 0, 19))

以上实例输出结果如下:

True
True
False
False

 

 

Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用.

下载selenium webdriver ‘geckodriver.exe’,下载好后放到python目录里面

firefox的目录也要添加到环境变量中

Selenium 库里有个叫 WebDriver 的 API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互 (发送文本、点击等),以及执行其他动作来运行网络爬虫。

selenium快速入门

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from selenium import webdriver

# 要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys

#创建浏览器对象
driver = webdriver.Firefox()

driver.get("http://www.baidu.com")

#打印页面标题“百度一下你就知道”
print driver.title

#生成当前页面快照
driver.save_screenshot("baidu.png")

# id="kw"是百度搜索框,输入字符串“微博”,跳转到搜索中国页面
driver.find_element_by_id("kw").send_keys(u"微博")

# id="su"是百度搜索按钮,click() 是模拟点击
driver.find_element_by_id("su").click()

# 获取新的页面快照
driver.save_screenshot(u"微博.png")

# 打印网页渲染后的源代码
print driver.page_source

# 获取当前页面Cookie
print driver.get_cookies()

# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')

# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')

# 输入框重新输入内容
driver.find_element_by_id("kw").send_keys("test")

# 模拟Enter回车键
driver.find_element_by_id("su").send_keys(Keys.RETURN)

# 清除输入框内容
driver.find_element_by_id("kw").clear()

# 生成新的页面快照
driver.save_screenshot("test.png")

# 获取当前url
print driver.current_url

# 关闭当前页面,如果只有一个页面,会关闭浏览器
# driver.close()

# 关闭浏览器
driver.quit()

1.页面操作

假如有下面的输入框

<input type="text" name="user-name" id="passwd-id" />

本文由澳门新葡亰手机版发布于编程,转载请注明出处:微信退款证书使用c,python爬虫入门

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文