python抓取网页数据(用Python写自动访问博客的功能,决定自己练习一下)

优采云 发布时间: 2022-03-05 10:03

  python抓取网页数据(用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/")

  异常处理和地址消除并不完善,在不同的网站运行进程中可能会出现一些小问题。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线