最近抽空学了两天的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文件

Python 学习(1) 简单的小爬虫的更多相关文章

  1. 利用python写一个简单的小爬虫 爬虫日记(1)(好好学习)

    打开py的IDLE >>>import urllib.request >>>a=urllib.request.urlopen("http://www.ba ...

  2. 【python】一个简单的贪婪爬虫

    这个爬虫的作用是,对于一个给定的url,查找页面里面所有的url连接并依次贪婪爬取 主要需要注意的地方: 1.lxml.html.iterlinks()  可以实现对页面所有url的查找 2.获取页面 ...

  3. Python学习---抽屉框架分析[小评论分析]0315

    注: 此处的小评论涉及数据库操作 初级小评论代码 settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS = (o ...

  4. Python 用Redis简单实现分布式爬虫

    Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台. 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接 ...

  5. Python学习 —— 实现简单的爬虫

    为了加快学习python3.x,查了许多资料后写了这个脚本,这个脚本主要是爬取百度图片'东方幻想乡'的图片,但还是有很多问题存在. 下面给出代码: # 更新了一下代码 from urllib impo ...

  6. python学习:猜数字小游戏

    在学习python过程中,没有项目做,就想到哪儿弄到哪儿. 头一发.让机器随机固定一个数字,然后让人去猜. 就这么简单.代码如下: #-*- encoding:utf8 -*- import rand ...

  7. 用Nodejs做一个简单的小爬虫

    Nodejs将JavaScript语言带到了服务器端,作为js主力用户的前端们,因此获得了服务器端的开发能力,但除了用express搭建一个博客外,还有什么好玩的项目可以做呢?不如就做一个网络爬虫吧. ...

  8. 用python写个简单的小程序,编译成exe跑在win10上

    每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...

  9. 用Python做一个简单的小游戏

    学习总是枯燥的,对于Python小白的我来讲,更是乏味的.为了提高学习的兴趣,今天我就来写一个小程序练练手. 数字猜谜游戏相信大家都不陌生,A给出最小值最大值,B写一个该范围内的数,A猜测写下的是多少 ...

随机推荐

  1. vue小项目---管理系统

    在上一篇文章中我们已经学习了vue的基本语法,常用属性,了解了vue的基本使用,现在让我们用vue配合Bootstrap来完成一个小项目. 首先导入Bootstap文件. <link rel=& ...

  2. CSS实现自适应不同大小屏幕的背景大图

    在网上搜了好多demo:可总有这样那样的一些小瑕疵,试过几次后发现这样效果是最好的 html: <div class='bg'> <img src="image/bk02. ...

  3. Node.js CVE-2017-1484复现(详细步骤)

    0x00 前言 早上看Sec-news安全文摘的时候,发现腾讯安全应急响应中心发表了一篇文章,Node.js CVE-2017-14849 漏洞分析(https://security.tencent. ...

  4. Minix3信号处理分析

    进程的信号处理的相关结构 PM中存放着所有进程的进程描述符,在一个进程描述符中,有一个指针,指向一个sigaction结构二维数组中的一项,表示这个进程所有信号的操作.一个sigaction结构包含信 ...

  5. day3--深入学习命令总结

    1.查看命令帮助的几种方法 a.[命令] --help   适用于一般命令,非内置命令 b.man  [命令]     适用于一般命令,非内置命令 c.help  [命令]     适用于内置命令 d ...

  6. 一起写框架-Ioc内核容器的实现-基础API的定义(三)

    Ioc内核要解决的问题 1.被调用方,在程序启动时就要创建好对象,放在一个容器里面. 2.调用方使用一个接口或类的引用(不用使用new),就可以创建获得对象. 解决这个两个问题的思路 1.定义一个对象 ...

  7. [LeetCode] BFS解决的题目

    一.130  Surrounded Regions(https://leetcode.com/problems/surrounded-regions/description/) 题目: 解法: 这道题 ...

  8. Struts2-Tiles整合

    Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以 ...

  9. ERP中文档权限设置:只能浏览不能下载?如何实现

    文档中心的文件夹授权只能是对岗位或者用户授权(这个跟我们的[[url=]用户及权限[/url]]下面的授权方式还不太一样)比如:要将文档中心的文件夹[公司文档]授权给用户A和用户B 授权逻辑: 软件界 ...

  10. Vue.js简单的应用

    1:一个简单实现 下面代码部分: <body> <div id="myDiv1"> {{userName}} </div> </body& ...