最近抽空学了两天的Python,基础知识都看完了,正好想申请个联通日租卡,就花了2小时写了个小爬虫,爬一下联通日租卡的申请页面,看有没有好记一点的手机号~   人工挑眼都挑花了。

用的IDE是PyCharm,首先下载一些需要用到的包和模块: requests 和 beautifulsoup4。 不过发现请求的url返回的是json数据,就没用beautifulsoup4而是直接用正则提取手机号了。

注释写的还是很详细的,打分的方法非常简陋,一般这种便宜的套餐也没啥好号,今天太晚了,就这样吧,哪天有空了可以在增加些打分的规则。   代码在下面:  困,睡觉去~

 import time
import random
import requests
import socket
import re
import http.client
import sys URL = 'https://m.10010.com/NumApp/NumberCenter/qryNum?callback=jsonp_queryMoreNums&provinceCode=76&cityCode=760&monthFeeLimit=0&groupKey=41242783&searchCategory=3&net=01&amounts=200&codeTypeCode=&searchValue=&qryType=02&goodsNet=4&_=1513948237449' def get_content(url):
'''获取url内容'''
#request header信息
header = {
'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
}
#超时时间
timeout = random.choice(range(80,180))
while True:
try:
#请求url获取返回的response对象
rep = requests.get(url, headers=header, timeout=timeout)
# rep = requests.get(url)
rep.encoding = 'utf-8'
break
except:
#出错后延迟一段你时间重试
time.sleep(random.choice(range(5, 20))) return rep.text def grade(phone):
'''给手机号打分'''
if phone[3:7] == phone[7:]:#1--abcdabcd
return 100
elif phone[3:5] == phone[7:9] and phone[5:7] == phone[9:]: #1--aabbaabb
return 95
elif phone[3:7] == phone[7::-1]: #1--abcddcba
return 90
elif phone[7:9] == phone[9:]: #尾号aabb
return 80
elif phone[7:9] == phone[9::-1]: #尾号abba
return 70
elif phone[3:5] == phone[7:9]: #1--ab--ab--
return 50
else:
return 0
#可以在加一些其他的判定条件 def save_resule(result):
'''把结果保存到result.txt文件'''
if len(result) > 0:
with open('result.txt', 'a') as f:
for x in result:
f.write(x + '\n') #循环查询次数
loop = 5
#结果集合
result = [] if len(sys.argv) == 2:
loop = int(sys.argv[1]) for i in range(1, loop+1):
# now = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
# print('{} 第{}次查询'.format(now, i))
html = get_content(URL) #请求url,获取json内容
# print(html)
regex_str = r'1\d{10}'
#提取手机号
phones = re.findall(regex_str, html)
for x in phones:
level = grade(x)
if level > 0 and x not in result:
result.append(x)
print(level, '-', x)
time.sleep(random.choice(range(1, 5)))#不要请求的太频繁
save_resule(result)#循环结束保存到result.txt文件

最新文章

  1. [OpenCV] Samples 12: laplace
  2. ORA-12520: TNS:listener could not find available handler for requested type of server
  3. 用Backbone.js创建一个联系人管理系统(四)
  4. android之RadioGroup
  5. php和java的一些比较
  6. Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络
  7. HTML 学习整理
  8. Javascript中的onclick事件
  9. 在cygwin下编译c语言
  10. HDU1789Doing Homework again(贪婪)
  11. centos 6.6 ios镜像文件 下载 官网和阿里云两种方式教你下载
  12. git添加本地的项目到git远程管理仓库
  13. 我的Python之旅第四天
  14. Map集合练习题
  15. java随笔3 spring 的注入执行逻辑顺序
  16. linux流量异常查看哪些程序占用的
  17. Postgresql分表与优化
  18. static关键字的内存分析
  19. mac 下测试各种IE版本
  20. windows python easy_install ,pip. selenium

热门文章

  1. copy11
  2. 常见的XSS攻击代码
  3. phpstudy APACHE支持.htaccess以及 No input file specified解决方案
  4. 【Arduino】2017年电子设计大赛B题 滚球控制系统|板球系统
  5. 移动端(H5)弹框组件--简单--实用--不依赖jQuery
  6. javaweb学习方案1
  7. tornado之子模板
  8. [转]ORACLE SQL解析之硬解析和软解析
  9. 转: .Net 4.0 ExpandoObject 使用
  10. 详谈Javascript类与继承