获取新闻类网页的所有a链接

2021-02-18 10:20

阅读:414

标签:import   pre   网站   findall   跳转   收录   bsp   失败   focus   

思路:

1.传入url

2.访问该网站,获取网站内容,使用try-except的方式

3.使用正则获取该页面的所有url地址

4.过滤url,获取到真正的url,过滤掉图片,css,js, # 之类的

5.保存到列表里

 

代码如下:

 1 import re
 2 import requests
 3 
 4 
 5 class Spider(object):
 6     """爬虫类"""
 7 
 8     def __init__(self, url):
 9         self.url = url
10         print([*- 开启采集数据 -*])
11 
12     def visit_url(self):
13         """访问该网站,访问成功,返回网站内容"""
14         response = requests.get(url=self.url)
15         try:
16             # 用来捕捉异常, 在内部判断status_code是否等于200,如果不等于,则抛出异常
17             response.raise_for_status()
18         except Exception as e:
19             print(e)
20             return False
21         # 使用content需要解码
22         response_content = response.content.decode()
23         # replace替换
24         return response_content.replace("", ")
25 
26     def re_get_url(self):
27         """使用正则获取该页面的所有url地址"""
28         web_content = self.visit_url()
29         if not web_content:
30             print([*-- 获取网站内容失败,采集结束 --*])
31             return False
32         # 使用正则匹配路由
33         web_url = re.findall([a-zA-Z]+://[^\s|^\"]*, self.visit_url())
34         # 判断url的长度不等于0
35         if len(web_url) != 0:
36             return web_url
37         return False
38 
39     def handle_static(self):
40         """主页面只选择采集可以跳转的链接,这个作为过滤列表"""
41         arr_dict = [jpg, jpeg, css, png, js, #]
42         # 定义空列表
43         arr_list = []
44         # 正则返回的url列表
45         arr_url = self.re_get_url()
46         if not arr_url:
47             print([*-- 页面链接获取失败,采集结束 --*])
48             # 如果后缀为过滤列表里的那么都判定为静态资源,不选择收录
49         # 遍历url的列表
50         for url_obj in arr_url:
51             # 定义一个标识
52             is_add = True
53             # 遍历过滤列表
54             for filter_arr_obj in arr_dict:
55                 # 过滤url
56                 if url_obj.find(filter_arr_obj) != -1:
57                     # find找到就得到下标,找不到就返回-1
58                     is_add = False
59             # 添加子链接
60             if is_add:
61                 # 如果是-1就是有用的url,添加到提前定义好的空列表里
62                 arr_list.append(url_obj)
63         print(arr_list)
64 
65     def run(self):
66         self.handle_static()
67 
68 
69 if __name__ == __main__:
70     url = https://www.washingtonpost.com/
71     spider = Spider(url)
72     spider.run()

 

获取新闻类网页的所有a链接

标签:import   pre   网站   findall   跳转   收录   bsp   失败   focus   

原文地址:https://www.cnblogs.com/wutongluo/p/12941491.html


评论


亲,登录后才可以留言!