爬虫入门(12) 您所在的位置:网站首页 百度百科入口 爬虫入门(12)

爬虫入门(12)

2023-03-14 12:22| 来源: 网络整理| 查看: 265

目录

0.学习笔记来源

1.抓取步骤

2.如何确定抓取策略:

3.百度百科相关词条信息

4.启动模块-main.py

5.URL 管理器-html_manager.py

6.HTML 下载器-html_download.py

7.Html 解析器-html_parser.py

8.Html 输出器-html_outputer.py

9.代码结构

10.运行结果

 

0.学习笔记来源

https://www.imooc.com/video/10688

1.抓取步骤

爬虫示例

2.如何确定抓取策略: 1.url格式2.数据格式3.页面编码

点击右键审查元素

查看关键的标签对和网页的编码右键检查元素

3.百度百科相关词条信息

百度百科相关词条信息

注意:目前是定向爬虫,爬取的数据策略可能随着网站更新而变化

4.启动模块-main.py # coding=utf-8 #!/usr/bin/python import url_manager, html_download, html_parser, html_outputer class SpiderMain(object): def __init__(self): # URL 管理器 self.urls = url_manager.UrlManager() # URL 下载器 self.downloader = html_download.HtmlDownload() # URL 解析器 self.parser = html_parser.HtmlParser() # URL 输出器 self.outputer = html_outputer.HtmlOutputer() # 爬虫的调度程序 def craw(self, root_url): # 爬取词条个数 count = 1 self.urls.add_new_url(root_url) while self.urls.has_new_url(): try: # 获取待爬取的 URL new_url = self.urls.get_new_url() print("craw %d : %s" % (count, new_url)) # 获取网页的源码 html_content = self.downloader.downloader(new_url) if html_content is None: print("html_content None") # 分析网页结构,获得这个网页的urls和标题,简介 new_urls, new_data = self.parser.parse(new_url, html_content) # 更新总的新的urls库 self.urls.add_new_urls(new_urls) # 保存这个urls的数据信息 self.outputer.collect_data(new_data) # 只爬取 1000 条的数据 if(count == 1000): break count = count + 1 except: # traceback.print_exc() print("craw failed") self.outputer.output_html() if __name__ == '__main__': # 入口 URL:百度百科的 Python 相关的百度词条 root_url = "https://baike.baidu.com/item/Python/407313" obj_spider = SpiderMain() # 启动爬虫 obj_spider.craw(root_url)

 

 

5.URL 管理器-html_manager.py # coding=utf-8 # !/usr/bin/python # URL 管理器 class UrlManager(object): def __init__(self): # 保存url,set可以保证不重复的url self.new_urls = set() # 未爬取信息的url self.old_urls = set() # 已爬取信息的url def add_new_url(self, url): if url is None: return # 这个url不在new_urls和old_urls,则加入到new_urls if url not in self.new_urls and url not in self.old_urls: self.new_urls.add(url) # print("add_new_url", url) def add_new_urls(self, urls): """ :param urls: list形式 :return: None """ if urls is None or len(urls) == 0: return for url in urls: self.add_new_url(url) def has_new_url(self): """ 判断是否还有新的未爬取内容的url :return: bool """ return len(self.new_urls) != 0 def get_new_url(self): """ 取出并且移除 :return: 取出的url """ new_url = self.new_urls.pop() self.old_urls.add(new_url) #print("get_new_url", new_url) return new_url

 

 

6.HTML 下载器-html_download.py # coding=utf-8 #!/usr/bin/python ''' HTML 下载器 ''' import urllib.request class HtmlDownload(object): def downloader(self, url): # 获取url的源码 if url is None: return None response = urllib.request.urlopen(url) if response.getcode() != 200: print("response.getcode() =", response.getcode()) return None return response.read()

 

 

7.Html 解析器-html_parser.py # coding=utf-8 # !/usr/bin/python ''' Html 解析器 传入 url 解析新的url列表(title 和 summary) ''' from bs4 import BeautifulSoup import re from urllib.parse import urlparse from urllib.parse import urljoin import urllib.parse """ 三个方法: get_new_urls(self, page_url, soup): 查找urls get_new_data(self, page_url, soup): 查找html里的信息 parse(self, page_url, html_content): BeautifulSoup分析html_content, """ class HtmlParser(object): # 分析爬取的网页源码,获得urls和网页信息 def _get_new_urls(self, page_url, soup): new_urls = set() # 获取所有的链接,例如a 标签 '''


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有