因为买不起归属地查询接口,于是自己爬了一个网站
在爬取网站时有许多曲折,大部分网站都做了反爬,于是发现一个网站没做反爬,但爬取的是图片形式(属实666)
我直接想到识别图片来获取文字,返回的形式是(省+市+通讯运营商)
首先得下载paddle的各种库,其次在文件中添加一个result.txt文件
代码开始运行后先删除result.txt中全部内容
然后再通过判断目标省份是否在图片获取的文字中,如果是则在result.txt中写识别正确入手机号
不说了直接上代码
代码如下:
import requests import time import os from PIL import Image from paddleocr import PaddleOCR from lxml import etree with open('result.txt', 'w') as file: file.truncate() a = input('目标归属:') def Imgscr(tel_num): url = 'https://www.haoma123.com/dh/114.aspx?w=' + str(tel_num) r = requests.get(url) r.encoding = 'utf-8' num = r.text num1 = etree.HTML(num) num2 = num1.xpath('//*[@id="span_gsd"]/img/@src') for num3 in num2: url1 = 'https://www.haoma123.com' + num3 return url1 def download_image(url, save_path): response = requests.get(url) if response.status_code == 200: with open(save_path, 'wb') as file: file.write(response.content) def Image_recognition(img_name): ocr = PaddleOCR(use_angle_cls=True, use_gpu=False) result = ocr.ocr(img_name, cls=True) for t in result[0]: t1 = (t[1][0]) b = a in t1 os.remove(img_name) if str(b) == 'True': with open('result.txt','a',encoding='utf-8') as file: file.write(str(phone_num) + '\n') print('True') for i in range(18888888888,19999999999): download_image((Imgscr(i)),str(i)+'.jpg') Image_recognition(str(i)+'.jpg')
使用的识别库是百度的飞桨,十分精准但就是有点太慢
第一个函数是爬取网站获取图片网址,第二个函数是保存图片,第三个函数是识别图片并判断
以上就是全部内容,感兴趣的可以继续升级改进
该文章全由本人原创,感谢支持