Python爬虫:爬取资源站点列表

发现某站点文章很多,爬取所有文章名和链接,并保存在txt文档中,方便后续查看

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import urllib,urllib2,re,requests
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

domain = [‘http://linux.linuxidc.com/‘]
name_url = [] #一级页面url name
name_url2 = [] #二级页面url name
name_url3 = [] #三级页面url name
name_url4 = [] #四级页面url name

def get():
    hd = {"User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}
    url = ‘http://linux.linuxidc.com/index.php‘
    html = requests.get(url,headers=hd).text
    #print html
    url_content = re.compile(r‘(<div style="float:left;width:410px"><img src="linuxconf/icons/folder.png"> <a href=".*?">.*?</a></div>)‘,re.S) #编译
    url_contents = re.findall(url_content,html) #匹配页面
    #print url_contents
    for i in url_contents:
        url_reg = re.compile(r‘<a href="(.*?)">‘)   #过滤资料链接
        name_reg = re.compile(r‘<a href=".*?">(.*?)</a></div>‘)  #过滤资料名称
        url_items = re.findall(url_reg,i)
        name_items = re.findall(name_reg,i)
        #print name_items[0]
        #拼接地址链接
        url = domain + url_items
        url_items = [‘‘.join(url)]
        #print url_items[0]
        for i,v in zip(name_items,url_items):
            name_url.append([i,v])
            #print i,v

    for j in name_url: #j[0]=name j[1]=url
        if j[1] == ‘http://linux.linuxidc.com/index.php?folder=cHVi‘:  #忽略pub目录
            continue
        elif j[1] == ‘http://linux.linuxidc.com/index.php?folder=MjAxMcTq18rBzw==‘:  # 忽略2011资料目录
            continue
        else:  #获取其他目录
            #print i[0]
            html2 = requests.get(j[1], headers=hd).text
            # print html2
            url_content2 = re.compile(r‘(<div style="float:left;width:410px"><img src="linuxconf/icons/folder.png"> <a href=".*?">.*?</a></div>)‘,re.S)  # 编译
            url_contents2 = re.findall(url_content, html2)  # 匹配二级页面
            #print url_contents2
            for p in url_contents2:
                url_reg2 = re.compile(r‘<a href="(.*?)">‘)  # 过滤二级页面资料链接
                name_reg2 = re.compile(r‘<a href=".*?">(.*?)</a></div>‘)  # 过滤二级页面资料名称
                url_items2 = re.findall(url_reg2, p)
                name_items2 = re.findall(name_reg2, p)
                #print name_items2,url_items2
                #拼接地址链接
                url2 = domain + url_items2
                url_items2 = [‘‘.join(url2)]
                #print name_items2[0],url_items2[0]
                for m,n in zip(name_items2,url_items2):
                    name_url2.append([m,n])
                    #print m,n

    for k in name_url2: #k[0]=name k[1]=url
        html3 = requests.get(k[1], headers=hd).text
        #print html3
        url_content3 = re.compile(r‘(<div style="float:left;width:410px"><img src="linuxconf/icons/folder.png"> <a href=".*?">.*?</a></div>)‘,re.S)  # 编译
        url_contents3 = re.findall(url_content3,html3)  #匹配三级页面
        #print url_contents3
        for p in url_contents3:
            url_reg3 = re.compile(r‘<a href="(.*?)">‘)  #过滤三级页面资料链接
            name_reg3 = re.compile(r‘<a href=".*?">(.*?)</a></div>‘)  # 过滤三级页面资料名称
            url_items3 = re.findall(url_reg3, p)
            name_items3 = re.findall(name_reg3, p)
            #print name_items3,url_items3
            # 拼接地址链接
            url3 = domain + url_items3
            url_items3 = [‘‘.join(url3)]
            #print name_items3[0],url_items3[0]
            for m, n in zip(name_items3, url_items3):
                name_url3.append([m, n])
                #print m,n

    for l in name_url3: #l[0]=name l[1]=url
        html4 = requests.get(l[1],headers=hd).text
        #print html4
        url_content4 = re.compile(r‘(<div style="float:left;width:410px"><img src="linuxconf/icons/folder.png"> <a href=".*?">.*?</a></div>)‘,re.S)  # 编译
        url_contents4 = re.findall(url_content4, html4)  # 匹配四级页面
        # print url_contents4
        for p in url_contents4:
            url_reg4 = re.compile(r‘<a href="(.*?)">‘)  # 过滤四级页面资料链接
            name_reg4 = re.compile(r‘<a href=".*?">(.*?)</a></div>‘)  # 过滤四级页面资料名称
            url_items4 = re.findall(url_reg4, p)
            name_items4 = re.findall(name_reg4, p)
            # print name_items4,url_items4
            # 拼接地址链接
            url4 = domain + url_items4
            url_items4 = [‘‘.join(url4)]
            # print name_items4[0],url_items4[0]
            for m, n in zip(name_items4, url_items4):
                name_url4.append([m, n])
                f = open(‘get_list.txt‘,‘a+‘)
                print "正在保存--%s" %m
                print >> f,"%s,%s" %(m,n)

if __name__ == "__main__":
    get()

执行过程:

在脚本文件同路径下会生成保存的文件:

文件内容:文章标题,文章链接

报错:

requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘linux.linuxidc.com‘, port=80): Max retries exceeded with url: /index.php?folder=MjAxN8Tq18rBzy8z1MIvMjXI1Q== (Caused by NewConnectionError(‘<requests.packages.urllib3.connection.HTTPConnection object at 0x0000000002B6D198>: Failed to establish a new connection: [Errno 10060] ‘,))

原因:http连接太多没有关闭导致

解决:使用requests的session客户端模式和保持长连接的状态

#定义
request = requests.Session()

#代码中全部替换为
html = request.get(url,headers=hd).text

报错参考:http://xiaorui.cc/2015/12/22/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E4%B8%8B%E7%94%A8requests%E8%AE%BF%E9%97%AEhttp-api%E6%97%B6%E9%81%87%E5%88%B0%E7%9A%84%E5%9D%91/

时间: 2024-10-11 07:54:48

Python爬虫:爬取资源站点列表的相关文章

python爬虫—爬取英文名以及正则表达式的介绍

python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个csv文件中:再读取csv文件当中的每个英文名链接,采用循环的方法读取每一个英文名链接,根据每个英文名链接爬取每个链接中的数据,保存在新的csv文件当中. 需要写一个爬取英文名链接的函数.将爬取的内容保存在csv文件的函数以及读取csv文件内容的函数.爬取英文名详情页内容的函数. 表5.3.1 函数名

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

python爬虫爬取美女图片

python 爬虫爬取美女图片 #coding=utf-8 import urllib import re import os import time import threading def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImgUrl(html,src): srcre = re.compile(src) srclist = re.findall(srcre,html)

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

用Python爬虫爬取广州大学教务系统的成绩(内网访问)

用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是"选择器"."选择器"指明了{}中的"样式"的作用对象,也就是"样式"作用于网页中的哪些元素.可参考:http://www.w3school.com.cn/cssref/css_selectors.asph

python爬虫爬取微博评论案例详解

这篇文章主要介绍了python爬虫爬取微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 数据格式:{"name":评论人姓名,"comment_time":评论时间,"comment_info":评论内容,"comment_url":评论人的主页} 以上就是我们需要的信息. 具体操作流程: 我们首相将主页获取完成以后,我们就会发现,其中 的内容带有相

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be

Python爬虫爬取一篇韩寒新浪博客

网上看到大神对Python爬虫爬到非常多实用的信息,认为非常厉害.突然对想学Python爬虫,尽管自己没学过Python.但在网上找了一些资料看了一下,看到爬取韩寒新浪博客的视频.共三集,第一节讲爬取一篇博客,第二节讲爬取一页博客.第三集讲爬取所有博客. 看了视频.也留下了代码. 爬虫第一步:查看网页源码: 第一篇博客的代码为蓝底的部分<a title="" target="_blank" href="http://blog.sina.com.cn/

Python爬虫爬取数据的步骤

爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多网页的变化规律,基本上都是只有小部分有所变化,如:有的网页只有网址最后的数字在变化,则这种就可以通过变化数字将多个网页链接获取: 2.把获取得到的多个网页链接存入字典,充当一个临时数据库,在需要用时直接通过函数调用即可获得: 3.需要注意的是我们的爬取并不是随便什么网址都可以爬的,我们需要遵守我们的