Python爬取百度百科页面数据

实践项目十:爬取百度百科Python词条相关1000个页面数据(慕课简单爬虫实战) 环境 操作系统:ubuntu 16.04 python版本:python2.7 爬虫架构 根据上面的流程,开始爬取百度百科1000个页面。运行流程很详细的说明。 我们要爬取的信息为 对应在html源码中的信息为: 知道了需要获取那些信息和爬虫的基本流程, 下面我们结合每一部分的功能来实现具体的代码。爬虫调度端启动爬虫,停止爬虫,或者监视爬虫的运行情况。 我们以百度百科pyth 阅读详情

Python爬取百度百科页面数据我将他分为五部分:主函数部分、URL管理器部分、网页下载器部分、网页解析器部分和输出部分,以下是代码:

主函数部分spider_main.py

# coding=UTF-8
'''
Created on 2017年4月4日
@author: zwl
'''
from baike_spider import url_manager, html_downloader, html_parser,\
    html_outputer




class SpiderMain(object):
    def __init__(self):
        self.urls = url_manager.UrlManager()
        self.downloader = html_downloader.HtmlDownloader()
        self.parser = html_parser.HtmlParser()
        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:
                new_url = self.urls.get_new_url()
                print 'craw %d : %s' %(count, new_url)
                html_cont = self.downloader.download(new_url)
                new_urls, new_data = self.parser.parse(new_url, html_cont)
                self.urls.add_new_urls(new_urls)
                self.outputer.collect_data(new_data)
                
                if count == 1000: 
                    break
                    
                count = count + 1
            except:
                print 'craw faild'    
        self.outputer.output_html()    




if __name__=="__main__":
    root_url = "http://baike.baidu.com/item/Python?sefr=cr"
    obj_spider = SpiderMain()
    obj_spider.craw(root_url)
    
    

URL管理器部分url_manager.py
   # coding=UTF-8
'''
Created on 2017年4月4日


@author: zwl
'''


class UrlManager(object):
    def __init__(self):
        self.new_urls = set()
        self.old_urls = set()
    
    def add_new_url(self, url):
        if url is None:
            return
        if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)
    
    def has_new_url(self):
        return len(self.new_urls) != 0


    
    def get_new_url(self):
        new_url = self.new_urls.pop()
        self.old_urls.add(new_url)
        return new_url


    
    def add_new_urls(self, urls):
        if urls is None or len(urls) == 0:
            return
        for url in urls:
            self.add_new_url(url)
    

网页下载器部分html_downloader.py
   # coding=UTF-8
'''
Created on 2017年4月4日


@author: zwl
'''
import urllib2




class HtmlDownloader(object):
    
    
    def download(self, url):
        if url is None:
            return None
        
        response = urllib2.urlopen(url);
        if response.getcode() != 200 :
            return None
        return response.read()
    
    网页解析器部分html_parser.py

# coding=UTF-8
'''
Created on 2017年4月4日

@author: zwl
'''
from bs4 import BeautifulSoup
import re
import urlparse

class HtmlParser(object):
    
    
    def _get_new_urls(self, page_url, soup):
        new_urls = set()
        links = soup.find_all('a', href=re.compile(r"/view/\d+\.htm"))
        for link in links:
            new_url = link['href']
            new_full_url = urlparse.urljoin(page_url, new_url)
            new_urls.add(new_full_url)
        return new_urls
    
    def _get_new_data(self, page_url, soup):
        res_data = {}
        res_data['url'] = page_url
        #<dd class="lemmaWgt-lemmaTitle-title"> <h1>Python</h1>
        title_node = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find("h1")
        res_data['title'] = title_node.get_text()
        #<div class="lemma-summary" label-module="lemmaSummary">
        summary_node = soup.find('div', class_="lemma-summary")
        res_data['summary'] = summary_node.get_text()
        
    
    def parse(self, page_url, html_cont):
        if page_url is None or html_cont is None:
            return 
        
        soup = BeautifulSoup(html_cont,'html.parser',from_encoding='utf-8')
        new_urls = self._get_new_urls(page_url, soup)
        new_data = self._get_new_data(page_url, soup)
        return new_urls,new_data
    

输出部分html_outputer.py

# coding=UTF-8
'''
Created on 2017年4月4日


@author: zwl
'''




class HtmlOutputer(object):
    def __init__(self):
        self.datas = []
    
    def collect_data(self, data):
        if data is None:
            return
        self.datas.append(data)


    
    def output_html(self):
        fout = open('output.html', 'w')
        fout.write("<html>")
        fout.write("<body>")
        fout.write("<table>")
        for data in self.datas:
            fout.write("<tr>")
            fout.write("<td>%s</td>"%data['url'])
            fout.write("<td>%s</td>"%data['title'].encode('utf-8'))
            fout.write("<td>%s</td>"%data['summary'].encode('utf-8'))
            fout.write("</tr>")
        fout.write("</table>")
        fout.write("</body>")
        fout.write("</html>")
        fout.close()
    
    
    
    















 
    
    
    
    
    
    





 
    

Python爬虫实战:基于Requests-HTML与异步技术高效爬取百度百科数据 本文将详细介绍如何使用Python最新爬虫技术高效爬取百度百科信息。我们将从爬虫基础讲起,逐步深入到高级技巧,包括使用Requests-HTML库解析页面、异步爬取技术、反反爬策略以及数据存储方案。文章包含完整的代码示例和实战技巧,帮助读者构建一个高效的百度百科爬虫系统。关键词:Python爬虫、百度百科、Requests-HTML、异步爬虫、数据解析请求频率控制:合理设置爬取间隔,避免过快请求User-Agent轮换:使用fake-useragent库随机生成UAIP代理池:使用高质量代理IP轮换。 阅读详情

相关推荐

用Python实现百度百科页面爬取

在互联网的世界里,网络爬虫(Web Crawler)又被称为网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种自动化获取网络信息资源的程序或脚本。它们按照一定的规则,自动从互联网上搜集信息,按照既定的规则对信息进行筛选、提取,并进行存储和进一步处理。爬虫在网络数据挖掘、搜索引擎优化、数据监控、市场分析等众多领域扮演着重要角色。通过爬虫技术,我们能够高效地从网页中提取出有价值的数据信息,满足数据分析、知识挖掘、自动化测试等多种业务需求。

weixin_42608299的博客 1643

Python网络爬虫(三):连续爬取百度百科词条数据

1.前言在Python网络爬虫系列的前两篇文章中,我们分别介绍了使用socket库和urllib库爬取网页数据,也稍稍提及了正则表达式。 但是,实际的爬虫工作更具系统性,更具模块性,也更加具备实用价值 接下来,我们将在一个模块中完成爬虫的几项基本工作:第一,爬取网页;第二,分析网页数据;第三,存储所需资源。 一个可参考的实例是:指定初始地址,利用网络爬虫爬取n条百度百科数据。当n很大时,我们爬

Meditator_hkx的博客 1万+

Python爬取百度百科信息[项目源码]

本文介绍了一个使用Python编写的爬虫程序,用于从百度百科上查找并整合特定人名的信息,然后下载到本地。程序通过requests库获取网页内容,利用BeautifulSoup和正则表达式处理HTML,提取所需数据。文章详细说明了爬虫的实现思路,包括删除超链接、获取列表信息、爬取目录和内容等步骤。此外,还提供了一个具体的示例,展示了如何爬取‘二极管’的相关信息,包括其定义、特性、分类、工作原理、应用场景等。该程序适用于需要批量整理学者或其他特定人物信息的场景。

【爬虫】Python爬虫教程(上篇)

本篇文章面向新手,赘述部分较多网络爬虫(又称为网页蜘蛛,网络机器人,在社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、或者蠕虫。

在岗Golang后端开发,分享一些日常笔记和代码 2463

arcgis建筑数据的矢量化(一)

简单来说,建筑数据的获取无外乎是矢量化和去网站下载 无奈的是,osm和网上的建筑数据只有全国的主要城市,实在是为难我们这些小城市的,百度和天地图上是有建筑数据,无奈人家不要开放下载啊,所以就只能矢量化咯, 矢量化,无外乎手动和自动,手动就是新建shp面手动勾绘,这里就不讲了,我们来看看自动矢量化 自动矢量化在arcgis中主要是利用arcscan和栅格转面(栅格转面这个效果真是一言难尽,所以我们主要讨论arcscan) 同时我们矢量化也不一定要局限于arcgis...

Jasenjane的博客 3927

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 197

爬虫实战(一) 用Python爬取百度百科

最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和解释放到数据库里面,当用户查询时直接读取数据库结果

半虹小站 3343

用Zotero+B站Kimi,我如何把一篇顶会论文快速做成组会PPT(含完整提示词)

本文介绍如何利用Zotero和Kimi快速将顶会论文转化为组会PPT,提升学术汇报效率。通过Zotero的文献管理插件和Kimi的AI提炼技术,实现从论文阅读到PPT生成的全流程自动化,帮助研究者在90分钟内完成高质量汇报准备。

weixin_30955617的博客 502

python类百度百科_Python抓取百度百科数据

抓取策略确定目标:确定抓取哪个网站的哪些页面的哪部分数据。本实例抓取百度百科python词条页面以及python相关词条页面的标题和简介。分析目标:分析要抓取的url的格式,限定抓取范围。分析要抓取的数据的格式,本实例中就要分析标题和简介这两个数据所在的标签的格式。分析要抓取的页面编码的格式,在网页解析器部分,要指定网页编码,然后才能进行正确的解析。编写代码:在网页解析器部分,要使用到分析目标得到...

weixin_39948309的博客 324

17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

基于51单片机,避障,低于50CM报警,LED灯亮起,自动翻晒用光敏电阻,光照强度大,电机转动,相当于翻晒粮食,远程控制用按键代替,按下去电机就转动,相当于翻晒粮食,然后光照强度和超声波的距离都在LCD1602显示屏显示出来。

weixin_70360261的博客 1450

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

Python爬取百度百科1000个页面的数据

# _*_ coding:utf8 _*_ import urllib.request import urllib.parse from bs4 import BeautifulSoup import re class UrlManager(object): def __init__(self): self.new_urls = set() self....

qq_30534935的博客 510

解锁RK3588+RTL8211F:千兆以太网PHY调优秘籍

本文探讨了RK3588芯片搭配RTL8211F千兆以太网PHY的优化方案。文章首先分析了RK3588和RTL8211F的硬件特性,指出时序问题可能源于时钟信号不稳定、传输延迟和PHY内部逻辑延迟。针对这些问题,提出了选用高质量时钟源、优化PCB布线等时序优化策略,以及合理配置硬件参数、优化网络协议等延迟优化方法。在配置实践部分,详细介绍了硬件连接规范和软件配置步骤,并建议使用Iperf、Ping等工具进行性能测试。最后总结了常见问题解决方案,展望了未来PHY芯片和传输技术的发展趋势。这些优化措施可显著提升网

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 288

用python3进行爬取百度百科页面数据实战演练

目录 什么是爬虫? Python3简单爬虫架构 url管理器 网页下载器和urllib.request模块 网页解析器和BeautifulSoup模块 用Python3爬取百度百科页面数据实战演练

qq_38419968的博客 740

OpenClaw使用ClawHub安装skill网络不稳定?Rate limit exceeded报错?试试这个国内高速镜像工具!

使用 ClawHub 安装 Skill 时遇到 🌐 网络不稳、❌ Rate limit 或命令不可用?使用这个镜像工具,轻松解决skill安装问题,⚡

XiaoqiangClub的博客 1261

c++篇 cad.arx Win10环境配置vs2019+arx2021多版本配置+vs2022 配置图

msvc v141 v140这个两个好像是编译vs2015 vs2017版本的,必须装,然后v142装最新的,剩下的有些是默认的,还有就是mfc这些恐怕要装,然后是v140v141这两个版本的windows sdk是8.1,需要单独装一下。Windows SDK version 8.1 下载地址。windows sdk是10.0.19041.0。先安装vs2019,如图。

我的博客 782

Python开发简单爬虫(二)---爬取百度百科页面数据

一、开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式、数据格式、和网页编码形式。 ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格式, 比如文本数据为div class="xxx", ③ 容易看到编码为utf-8 2.分析目标 目标: 百度百科python词条 入口页:http://baike.baidu....

weixin_30558305的博客 443

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python爬去百度百科词条_python简单爬虫爬取百度百科python词条网页

目标分析:目标:百度百科python词条相关词条网页 - 标题和简介入口页:https://baike.baidu.com/item/Python/407313URL格式:- 词条页面URL:/item/xxxx数据格式:- 标题:***- 简介:***页面编码:utf-8爬虫主入口文件spider_main.py#coding:utf-8importurl_managerimporthtml_d...

weixin_39948309的博客 526

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

编写Python代码——爬取百度百科Python词条相关1000个页面数据【未完慕课】

实例爬虫 1、确定目标:抓取哪个网站的哪个网页的哪部分数据eg:抓取百度百科【python词条页面,及相关词条页面的标题和简介】 2、分析目标: (1)url格式(用来限定抓取的页面范围)  (2)数据格式   (3)页面编码 3、代码编写 4、执行爬虫

sherri_du的博客 1227

慕课爬虫实战 爬取百度百科Python词条相关1000个页面数据

http://www.imooc.com/learn/563 spider_main.py 1 #!/usr/bin/python 2 # coding=utf-8 3 4 #from baike_spider import url_manager,html_downloader,html_parser,html_outputer 5 import url_man...

weixin_33922672的博客 313

python简单爬取一个页面_【Python开发简单爬虫】第7章 :爬取百度百科1000个页面的数据(源码)...

1、spider_main.py#coding:utf8import url_manager,html_downloader,html_outputer,html_parserclass SpiderMain(object):def __init__(self):self.urls = url_manager.UrlManager()self.downloader = html_downloade...

weixin_39687786的博客 220

用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科

最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果但是自己又没有心思做这样一个数据库,于是就想到了百度百科这么一个现成的 “数据库”下面我们就通过 urllib 和 xpath 来获取百度百科的内容1、爬取百度百科百度百科是一个静态网页,爬取起来很简单,而且请求参数可以直接放在 UR...

weixin_37988176的博客 2053

python简单爬虫爬取百度百科python词条网页

目标分析:目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL:/item/xxxx 数据格式: - 标题: <dd class="lemmaWgt-lemmaTitle-title"><h1>***</h1></...

weixin_34008805的博客 375

Python笔记(爬虫)(一)—— 入门

下载器 官方库urllib2和第三方库request 解析器 Beautiful Soup(第三方库),用于从HTML或XML中提取数据,官网http://www.crummy.com/software/BeautifulSoup/ 安装并测试beautifulsoup4 安装:pip install beautifulsoup4 测试: import bs4 print bs4 实例(确定目标、分析目标(url格式、数据格式、网页编码)、编写代码、执行爬虫): # coding:utf-8 import

成长笔记 248

Python爬虫爬取百度百科页面

Python爬虫爬取百度百科页面 去发现同类优质开源项目:https://gitcode.com/ 项目描述 本项目是一个简单的Python爬虫框架,用于爬取百度百科页面并提取有价值的数据。爬虫的架构设计如下: 爬虫调度器:负责整个爬虫的调度工作。 URL管理器:管理待爬取和已爬取的URL。 网页下载器:使用urllib2库下载网页内容。 网页解析器:使用BeautifulSoup库解析网页内容...

gitblog_09812的博客 1104
上一篇: 网页解析器--Beautiful Soup
下一篇: 与MVC框架解耦的OGNL:前世今生及其基本用法
github_zwl
博客等级 码龄11年 300粉丝 171原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值