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

简介:

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/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  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  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  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  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  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  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  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])
                 =  open ( 'get_list.txt' , 'a+' )
                 print  "正在保存--%s"  % m
                 print  >> f, "%s,%s"  % (m,n)
 
 
if  __name__  = =  "__main__" :
     get()


执行过程:

wKioL1knnz3DXDghAAIqKNvtVqo301.png


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

wKioL1knn3ORgG1cAAAu7WUhq-0805.png


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

wKioL1knn8DQZtLxAAKXTMCPrNM322.png




报错:

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客户端模式和保持长连接的状态

1
2
3
4
5
#定义
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/






      本文转自M四月天 51CTO博客,原文链接:http://blog.51cto.com/msiyuetian/1929710,如需转载请自行联系原作者





相关文章
|
13天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
17天前
|
数据采集 Python
【python】爬虫-西安医学院-校长信箱
本文以西安医学院-校长信箱为基础来展示爬虫案例。来介绍python爬虫。
【python】爬虫-西安医学院-校长信箱
|
1月前
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
71 0
|
1月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
1月前
|
数据采集 测试技术 API
python爬虫之Appium 的使用
搭建appium环境,appium基本使用,API操作等等
46 0
|
1月前
|
数据采集 JavaScript 前端开发
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
|
23天前
|
数据采集 安全 Python
python并发编程:Python实现生产者消费者爬虫
python并发编程:Python实现生产者消费者爬虫
24 0
python并发编程:Python实现生产者消费者爬虫
|
1月前
|
数据采集 数据挖掘 调度
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
本文介绍了如何使用Python的Aiohttp框架构建异步爬虫,以提升数据抓取效率。异步爬虫利用异步IO和协程技术,在等待响应时执行其他任务,提高效率。Aiohttp是一个高效的异步HTTP客户端/服务器框架,适合构建此类爬虫。文中还展示了如何通过代理访问HTTPS网页的示例代码,并以爬取微信公众号文章为例,说明了实际应用中的步骤。
|
1月前
|
数据采集 测试技术 API
python爬虫之app爬取-微信朋友圈
搭建appium环境,appium基本使用,API操作等等
79 0
|
3天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
13 0