获取新闻类网页的所有a链接
2021-02-18 10:20
标签:import pre 网站 findall 跳转 收录 bsp 失败 focus 思路: 1.传入url 2.访问该网站,获取网站内容,使用try-except的方式 3.使用正则获取该页面的所有url地址 4.过滤url,获取到真正的url,过滤掉图片,css,js, # 之类的 5.保存到列表里 代码如下: 获取新闻类网页的所有a链接 标签:import pre 网站 findall 跳转 收录 bsp 失败 focus 原文地址:https://www.cnblogs.com/wutongluo/p/12941491.html 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()