zoukankan      html  css  js  c++  java
  • 【Python】爬虫-1

    #练习1:获取搜狐网页上所有的URL并且把与篮球有关的内容筛选出来
    #算法:
    #1、获取搜狐网站所有内容
    #2、判断哪些是链接,获取URL格式有效的链接
    #3、获取每个有效URL网页的内容
    #4、判断内容是否包含篮球
    #5、如果包含篮球,保存网页
    
    import requests
    import re
    import bs4
    
    resq = requests.get("http://www.sohu.com")#请求搜狐网站
    print resq.text[:100]#打印响应结果前一百长度
    
    print "*****************"*5
    links = re.findall(r'href="(.*?)"', resq.text)#查找所有包含href内容
    #print links
    print len(links)
    valid_link = []#保存有效连接
    invalid_link = []#保存无效连接
    
    print "*****************"*5
    
    for link in links:
        if re.search(r"(.jpg)|(.jpeg)|(.gif)|(.ico)|(.png)|(.js)|(.css)$", link.strip()):#资源连接筛选出来
            #print 6, link
            invalid_link.append(link.strip())
            continue#进入此判断之后执行完直接执行下一次循环
        elif link.strip() == "" or link.strip() == "#" or link.strip() == "/":#无效内容筛选去除
            #print 1,link
            invalid_link.append(link)
            continue
        elif link.strip().startswith("//"):#把有效相对连接筛选保存
            #print 2,link
            valid_link.append("http:" + link.strip())
            continue
        elif link.strip().count("javascript") >= 1 or link.strip().count("mailto:") >= 1:#引用js连接及邮箱超级连接去除
            #print 3,link
            invalid_link.append(link.strip())
            continue
        elif re.match(r"/w+", link):#把剩下所有内容连接再做进一步筛选
            #print 5,link
            if re.match(r"http://.*?/", resq.url.strip()):#http开头连接筛选
                valid_link.append(re.match(r"http://.*?/", resq.url.strip()).group() + link.strip())#把连接以/结尾内容保存
            else:
                valid_link.append(re.match(r"http://.*", resq.url.strip()).group() + link.strip())#把连接以内容结尾保存
            continue
        else:
            #print 7,link
            valid_link.append(link.strip())#筛选剩下的内容都保存到有效列表中
    
    print "*****************"*5
    
    file_num = 1#为创建文件准备
    for link in list(set(valid_link)):
        # print link
        resq = requests.get(link, verify=True)#允许证书校验并访问所有保存的有效连接
        if u"篮球" in resq.text:#筛选网页内容中是否存在“篮球”内容
            #print link
            if u'meta charset="utf-8"' in resq.text:#判断网页是否以utf-8编码
                with open(r"e:\test4\crawler\" + str(file_num) + ".html", "w") as fp:
                    fp.write(resq.text.strip().encode("utf-8"))#编码内容为utf-8后保存到指定目录
            else:
                with open(r"e:\test4\crawler\" + str(file_num) + ".html", "w") as fp:
                    fp.write(resq.text.strip().encode("gbk"))#编码内容为gbk后保存到指定目录
            file_num += 1
    
    print "Done!"
  • 相关阅读:
    【博弈论】K倍动态减法游戏
    【博弈论】翻硬币游戏8种模型
    P4124 [CQOI2016]手机号码(数位DP,前导0)
    AtCoder Beginner Contest 146
    Sumitomo Mitsui Trust Bank Programming Contest 2019
    ICPC 2018 Nanjing Regional
    模拟退火基础学习&模板
    AtCoder Beginner Contest 117
    AtCoder Beginner Contest 118
    AtCoder Beginner Contest 119
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/9038848.html
Copyright © 2011-2022 走看看