神猫链接采集器测试文档代码_少儿python爬虫数据采集

Python海龟宝典含200多个原创的用turtle模块制作的创意程序,原名《Python趣味编程200例》。准备参加全国创意编程与智能设计大赛的同学们可以用来做参考。

神猫链接采集器测试文档代码

"""
    标题:神猫链接采集器,英文名 catLinkPicker
    描述:输入命令行参数为,域名 正则 初始链接列表文件名
    针对某些特征网站需要具体问题具体分析,再更改代码,或用selenium翻页采集链接,效果更好.
    特别是对于那些直接网址直接是以诸如 “aspx?id=xxxx”或 “php?id=yyyy”结尾的的网页就不必采集了,这种网页是直接查询数据库。
    找出最小的id和最大的id,做个列表导出到文件即可。
    如果需要中止while循环,新建一个文件名为'中止.txt'的空文件即可.
    作者:李兴球
    日期:2018/2/28

"""

from lxml import html
import requests
from time import ctime,time
from random import choice
import os
import re
import sys
from urllib.parse import urljoin        #用于转换url的相对路径与绝对路径

def loadInitUrl(fileName):
    """从文件中加载种子链接,返回集合"""
    print("\n加载初始网址...\n")
    oneSet=set()
    try:
        f = open(fileName)
        for link in f:
           oneSet.add(link.strip())
        f.close()
    except:
        pass
    
    return oneSet
    
def writeToFile(aset,regex,fileName):
    """把aset集合的符合正则表达式的链接写入fileName中,"""
    
    f = open(fileName,mode='w')
    counter = 0
    for link in aset:
        if re.match(regex,link):
            print("发现一个符合要求的链接:",link)
            f.write(link + "\n")
            counter = counter + 1
    f.close()
    print(" 本次共有",counter,"个符合正则表达式的链接写入",fileName,"中")
    
def smartRequest(url,encode):

    """下载网页源码的函数    
    请求头,也可以多用不同的浏览器抓一些,本程序暂不轮换header"""
    headers = {  
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    "Cookie":"_ga=GA1.2.1707472291.1518440445; _gid=GA1.2.879678725.1518440445; aliyungf_tc=AQAAAG899EWo7QwAkfeqdbtP7US/hKO+; SERVER_ID=7a2a6789-c873f3e2; Hm_lvt_05d39f4d0b6d45b03bf3bb358aba968a=1518440459,1518485016; Hm_lvt_74489c025adf11db1de5f58194b93d62=1518440494,1518491019; Hm_lpvt_74489c025adf11db1de5f58194b93d62=1518492750; Hm_lpvt_05d39f4d0b6d45b03bf3bb358aba968a=1518570483",
    "Upgrade-Insecure-Requests":"1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
    }
    page = requests.models.Response()         #空的requests响应对象
    try:
        page = requests.get(url,headers=headers, timeout=10)
        page.encoding=encode
    except:
        print("@",ctime(),"访问",url,"发生错误")
        

    return page
    
def collectLinksFrom(configList):

    domain = configList['domain']
    regex = configList['regex']
    fileName = configList['filename']
    
    linkSet1 = loadInitUrl(fileName)      #从文件中加载初始URL
    if len(linkSet1)==0:
        try:
            requests.get("http://www." + domain)
            linkSet1.add("http://www." + domain)
        except:
            pass            
        try:
            requests.get("https://www." + domain,timeout=3)
            linkSet1.add("https://www." + domain)
        except:
            pass          

    计数器=0
    linkSet2 = set()
    allLinks = set() #linkSet1.copy()    #allLinks集合存所有的链接
    startTime = time()

    正则=re.compile(regex)
    selectedLinks=set()             #符合正则的链接集合
    运行 =True
    print("初始网址链接数:",len(linkSet1))
    while 运行:
        for oneurl in linkSet1:
            
            #中止条件成立即退出循环,要中止这个死循环,新建一个文件名为'中止.txt'的空文件.
            持续时间 = int(time() - startTime)
            if 持续时间 % 10 ==0 :        #每10秒检测一次
                if os.path.exists("中止.txt"):
                    运行= False
                    break
            #中止条件代码段结束.
                
            try:            
                page = requests.get(oneurl)   #请求.得到源代码
                #print(page.text)
                tree= html.fromstring(page.content)    #返回 lxml.html.HtmlElement ,生成html元素 树
            except:
                print(oneurl,"出错了")
                continue
            for link in tree.xpath("//a"): # //a[contains(@href,'" + domain + "')]有些网站很多相对链接, 这时大部分链接就获取不到了。
                if not ('href' in link.attrib.keys()):continue
                newUrl = link.attrib['href']                                 #获取链接
                newUrl = newUrl.strip()
                newUrl = urljoin(oneurl, newUrl)  #转换相对路径到绝对路径
                
                if (domain in newUrl ) and (not (newUrl in allLinks)):                              #发现新链接
                    print(newUrl)
                    linkSet2.add(newUrl)
                    allLinks.add(newUrl)
                    计数器= 计数器 + 1
                    if len(allLinks) % 20 ==0:
                       print(domain,"链接采集中," , len(allLinks),"个链接@",ctime()," #中止本程序请新建名为'中止.txt'的文件\n")
                        
                       writeToFile(allLinks,正则,fileName) #符合正则的则写入文件中
            
        
        linkSet1=linkSet2  #linkSet1指向linkSet2的内容
        linkSet2=set()    #对linkSet2进行清空
    print("\n发现中止条件,安全着陆")
    print(len(allLinks),"个链接@",ctime())
    writeToFile(allLinks,正则,fileName)
    

if __name__=="__main__":

    configList=dict()

    print("神猫链接采集器.\n")
    if len(sys.argv)<2:
        print("没有输入命令行参数,启用测试模式。")
        configList['domain']="nkjfrc.com"
        configList['regex']="http://www.nkjfrc.com/ResumeShow.aspx"
        configList['filename']="链接表.txt"
    else:
        if (len(sys.argv)==4):
            configList['domain'] = sys.argv[1]
            configList['regex'] = sys.argv[2]
            configList['filename'] = sys.argv[3]
        else:
            selfName = configList[0].split(".")[0]
            print("参数错误,形式为:")
            print(selfName," 域名 正则表达式 文件名")
        
    collectLinksFrom(configList)
    



 

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 神猫链接采集器测试文档代码_少儿python爬虫数据采集

李兴球Python微信公众号文章列表

Python游戏海龟模块教程说明书与案例若干免费发放

爱的纪念_Python创意情景动画源代码解析

少儿Python编程到底学些什么?这些代码或许回答了问题.

Python编程家长会花絮_萍乡中小学Python家长会现场

火星路上等着你_少儿从小学什么最好呢?

国家大力整顿教育培训机构,Scratch或Python少儿编程还有得教吗?

鸿蒙系统支持Python开发_可视化编程特别兴趣小组

Scratch作品转Python作品_小猴接桃

python海龟数据可视化。第七次全国人口普查历年数据图表

你的孩子Python编程学到哪个阶段了?给孩子报编程的家长,务必仔细一读。

五一神女来对话,看看她们聊什么?赠Python教案等。

五一快乐有大礼,告诉大家我是如何上Python课的。

Python名堂多,趣味到处有,劈开机械手,帧帧是图片。速算达人之猫狮大战正在进行。 逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。 Python之潮来临,我在安源区教师科技创新能力的Python讲座

小心你的Python程序,它会是你的一面镜子。小方块闯迷宫.py源代码简析。送Scratch算法集。?

铃儿响钉铛_音效怎能忘_Python配音之Pygame混音器

人面桃花相映红_winsound模块简介

《Python昨晚我想你了》_开源的游戏海龟模块实例案例浅析

《八猫联动初体验》_来自游戏海龟模块的问候

喜爱春天的人儿啊 心地纯洁的人_Python逐行像素显示

旋转之三叶炫彩扇_蟒蛇与海龟的表演

彩虹欢迎字幕_三模合体滚图形

《Python海龟宝典》简介

100%错误的算法还在用,明明没有错别字,说我有11个错别字

奇怪的Python代码,谁能帮我解释一下??

人造地球系统让人类文明充满整个宇宙之Python32768版

深夜,是什么把你的大脑搞成一团浆糊!再谈少儿编程!

5线城市萍乡的少儿Python寒假班学的是什么内容?

关于纯少儿编程课程进化的自然选择

Python海龟画图经典作品_国庆中秋双重喜庆源代码免费下载

海龟为什么要自杀!turtle制作游戏秘籍之一

朋友,你是否知道我在仰望着你_Python神笔马良案例集

酷酷的爆炸效果_Python海龟画图不仅仅是画图

虫子满屏爬_三bug多线程示例程序浅析 少儿Python视频课程A级简介

给的gif图片加文字水印_拆帧与合帧(免费下载180个Python创意源码

用Python制作酷炫图形之如意金箍棒_颜色增加模块应用

简单的用Python做酷炫图形与动画

sb3转exe,sb3素材提取器,编程小子apk, 未公开的pygame游戏集/scratch/python少儿编程免费下载集合

夜幕下的霓虹

学本领,探索更大的世界!

李兴球博客 风火轮编程主页
error: Content is protected !!