python_爬百度百科词条
如何爬取?
明确目标:爬取百度百科,定初始百度词条:python,初始URL:http://baike.baidu.com/item/Python,爬取数据量为1000条,值爬取简介,标题,和简介中url
怎么爬: 利用谷歌开发工具,分析html结构,分析查询层次与方法
怎么写: 面向过程和面向对象两个方向
环境声明:
python 3.50
requests 库
beautifulsoup 库
使用面向过程的方式爬取:
#!/usr/bin/python3
import re
import bs4
import requests
from bs4 import BeautifulSoup # 从百度百科爬取数据为三个字段,标题,简介,关联URL
# 给定初始百度词条:python,初始URL:http://baike.baidu.com/item/Python,爬取数据量为1000条
# 那就先有4个模块,URL管理器,下载器,解析器,数据展示
# 通过requests、BeautifulSoup两个库,实现下载器和解析器,通过两个集合数据类型,实现URL管理器
# URL拼接 起始url :http://baike.baidu.com
# new_urls = set()
# old_urls = set()
# 已经在old_urls不再爬取,不在添加到new_urls中并从其中返回一个URL def url_manager(links):
if links is not None:
# 把重复的url去掉
links = links.difference(old_urls)
if links is not None:
for i in links:
new_urls.add(i) def download_html(url):
headers = {
# 'Host': 'static.tieba.baidu.com',
'Referer': 'http://baike.baidu.com/item/Python',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
# 返回下载页面
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
response.encoding = response.apparent_encoding
return response.text
except:
return None
pass def analysis(page_html, one_url):
# 返回标题,简介,关联URL
# temp = title + introduction + page_url
# links = 关联URL
links = []
temp_url = 'http://baike.baidu.com'
soup = BeautifulSoup(page_html, 'html.parser') # 获取标题
title = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find('h1').get_text()
# print(title) # 获取简介
introduction = soup.find('div', class_="lemma-summary").get_text().replace('\nPython[1]\xa0\n(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),', '')
# print(introduction) # 获得关联URL,只爬取简介中关联的URL
links_labl = soup.find('div', class_="lemma-summary").find_all('a', href=re.compile("^/item/")) # links_text = soup.find('div', class_="lemma-summary").find_all('a', href=re.compile("^/item/"))
# for i in links_text:
# print(i.get_text()) for link in links_labl:
new_url = temp_url + link['href']
links.append(new_url)
temp = one_url + ' : ' + title + '_' + introduction
message.append(temp) if links is not None:
links = set(links)
else:
links = None
return links def out_data():
for i in message:
print(i)
pass if __name__ == '__main__':
new_urls = set()
old_urls = set()
message = []
start_url = 'http://baike.baidu.com/item/Python'
# 起始页
page_html = download_html(start_url)
links = analysis(page_html, start_url)
url_manager(links) # 起始页简介中URL
for i in range(100):
url = new_urls.pop()
try:
page_html = download_html(url)
if not page_html:
continue
urls = analysis(page_html, url)
url_manager(urls)
except:
print('爬取失败')
old_urls.add(url)
# 依次打印爬取到的值
out_data()
python_爬百度百科词条的更多相关文章
- Python 爬虫实例(爬百度百科词条)
爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入 ...
- python 使用selenium模块实现自动搜索百度百科词条(模拟人工搜索)
目标:模拟人工搜索百度百科词条,爬取相关信息,自动删除上一个关键词,输入新关键词,继续搜索,直到循环结束. 代码: from selenium import webdriver from seleni ...
- python简单爬虫 用beautifulsoup爬取百度百科词条
目标:爬取“湖南大学”百科词条并处理数据 需要获取的数据: 源代码: <div class="basic-info cmn-clearfix"> <dl clas ...
- java 如何爬取百度百科词条内容(java如何使用webmagic爬取百度词条)
这是老师所布置的作业 说一下我这里的爬去并非能把百度词条上的内容一字不漏的取下来(而是它分享链接的一个主要内容概括...)(他的主要内容我爬不到 也不想去研究大家有好办法可以call me) 例如 互 ...
- R语言爬虫:爬取百度百科词条
抓取目标:抓取花儿与少年的百度百科中成员信息 url <- "http://baike.baidu.com/item/%E8%8A%B1%E5%84%BF%E4%B8%8E%E5%B0 ...
- 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科
我今天弄了一下午修改这个代码,最后还是弄好了.原因是正则表达式的筛选不够准确,有时候是会带http:baidu这些东西的.所以需要一个正则表达式的断言,然后还有一点是如果his里面只有一个元素就不要再 ...
- Python3爬取百度百科(配合PHP)
用PHP写了一个网页,可以获取百度百科词条.源代码已分享至github:https://github.com/1049451037/xiaobaike/tree/master 那么通过Python来爬 ...
- python简单爬虫爬取百度百科python词条网页
目标分析:目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL:/ ...
- Python开发简单爬虫(二)---爬取百度百科页面数据
一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...
随机推荐
- Linux redhat ICE环境安装
1.安装64位redhat6.4操作系统(客户机为64位)为软件开发工作站模式. 2.卸载yum源,重新安装为免费的CentOS6.4 yum源(yum能解决软件安装中的包依赖问题,redhat 未注 ...
- 【次小生成树】bzoj1977 [BeiJing2010组队]次小生成树 Tree
Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...
- apache2.2版本安装说明
部署httpd服务 apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方 ...
- [笔记]Linux命令行大全
date 显示当前时间和日期 cal 显示当前月份的日历 df 查看磁盘剩余空间的数量 free 显示空闲内存的数量 pwd 打印当前工作目录 cd 切换目录 ls 列出文件夹内容 绝对路径:开始于根 ...
- 定义一个数,它可能为正 也可能为负 var num = Math.pow(-1,parseInt(Math.random() * 2) + 1);
// 定义一个随机数范围从0 ~页面宽度 var x = parseInt(Math.random() * myCanvas.width); // 定义一个随机数 范围从0 ~页面高度 var y = ...
- 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
1289 大鱼吃小鱼 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: ...
- BZOJ 3098: Hash Killer II(新生必做的水题)
3098: Hash Killer II Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1555 Solved: ...
- [bzoj2286] [Sdoi2011消耗战
还是虚树恩..模板都能打挂QAQ 先在原树上预处理出mndis[i],表示根节点到节点i 路径上边权的最小值(就是断开i与根的联系的最小花费) 建完虚树在虚树上跑树形DP..f[i]表示断开 i 所 ...
- 解决 重启nginx: [alert] kill(189, 1) failed (3: No such process)
解决 nginx: [alert] kill(189, 1) failed (3: No such process) [root@localhost/]# nginx -s reloadnginx: ...
- 网络爬虫技术Jsoup——爬到一切你想要的(转)
转自:http://blog.csdn.net/ccg_201216323/article/details/53576654 本文由我的微信公众号(bruce常)原创首发, 并同步发表到csdn博客, ...