python抓取网页数据(用Python写自动访问博客的功能,决定自己练习一下)
优采云 发布时间: 2022-03-05 10:03python抓取网页数据(用Python写自动访问博客的功能,决定自己练习一下)
看到一篇博文,讲的是用Python写博客自动访问的功能。它的核心功能是抓取网页中的链接,类似于网络爬虫工具。由于我刚刚学习了 Python,所以我决定自己练习一下。我写了一些我一开始认为很简单的东西,但是花了很长时间才最终完成。看来纸上谈兵浅薄,勤练才是王道。虽然花了很多时间,但我觉得我收获了很多。
这段代码的知识点包括以下几点:
列表的使用;编写自定义全局函数;自定义类和继承类的编写;使用标准模块进行异常处理
请参阅下面的代码。
首先,导入使用的标准模块:
import html.parser as parser
import urllib.request
然后是分析网页中的 URL 的类定义:
1 class MyHtmlParser(parser.HTMLParser):
2 def __init__(self, lst = None):
3 super().__init__() #这里容易漏掉导致出错
4 if not lst:
5 self.urls = []
6 else:
7 self.urls = lst
8
9 def handle_starttag(self, tag, attrs):
10 for attr, value in attrs:
11 if "http" in value and ".js" not in value \
12 and value not in self.urls:
13 self.urls.append(value)
14
15 def handle_startendtag(self, tag, attrs):
16 for attr, value in attrs:
17 if "http" in value and ".js" not in value \
18 and value not in self.urls:
19 self.urls.append(value)
解析网址功能:
1 def ParseUrlsInText(text, lst):
2 pars = MyHtmlParser(lst)
3 try:
4 pars.feed(text)
5 #添加异常处理,可能会遇到各种异常
6 except parser.HTMLParseError as ex:
7 print("parse failed.",ex)
最后是实现整个事情的函数:
1 def VisitUrlsInPage(pageUrl):
2 url_list = [pageUrl]
3 for url in url_list:
4 try:
5 fh = urllib.request.urlopen(url)
6 data = fh.read()
7 ParseUrlsInText(str(data), url_list)
8 #这里是为了快速结束,去掉就变成小爬虫了
9 if len(url_list) >= 200:
10 break
11 except urllib.request.URLError:
12 print("Failed.")
13 continue
14 print("length: ", len(url_list))
15 for url in url_list:
16 print(url)
17
18
19 if __name__ == '__main__':
20 VisitUrlsInPage("http://www.cnblogs.com/jason-yang/")
异常处理和地址消除并不完善,在不同的网站运行进程中可能会出现一些小问题。