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

思路:

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 = url10 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 False21 # 使用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 False32 # 使用正则匹配路由33 web_url = re.findall([a-zA-Z]+://[^\s|^\"]*, self.visit_url())34 # 判断url的长度不等于035 if len(web_url) != 0:36 return web_url37 return False38 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 = True53 # 遍历过滤列表54 for filter_arr_obj in arr_dict:55 # 过滤url56 if url_obj.find(filter_arr_obj) != -1:57 # find找到就得到下标,找不到就返回-158 is_add = False59 # 添加子链接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()

 

相关文章