用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科
最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释
我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果
但是自己又没有心思做这样一个数据库,于是就想到了百度百科这么一个现成的 “数据库”
下面我们就通过 urllib 和 xpath 来获取百度百科的内容
1、爬取百度百科
百度百科是一个静态网页,爬取起来很简单,而且请求参数可以直接放在 URL 里面,例如:
可以说是十分方便,也不多说,直接放代码,有不明白的地方可以看看注释:
如果对于 urllib 的使用不太清楚,可以参考 爬虫系列(三) urllib的基本使用
如果对于 xpath 的使用不太清楚,可以参考 爬虫系列(九) xpath的基本使用
import urllib.request
import urllib.parse
from lxml import etree
def query(content):
# 请求地址
url = 'https://baike.baidu.com/item/' + urllib.parse.quote(content)
# 请求头部
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 利用请求地址和请求头部构造请求对象
req = urllib.request.Request(url=url, headers=headers, method='GET')
# 发送请求,获得响应
response = urllib.request.urlopen(req)
# 读取响应,获得文本
text = response.read().decode('utf-8')
# 构造 _Element 对象
html = etree.HTML(text)
# 使用 xpath 匹配数据,得到匹配字符串列表
sen_list = html.xpath('//div[contains(@class,"lemma-summary") or contains(@class,"lemmaWgt-lemmaSummary")]//text()')
# 过滤数据,去掉空白
sen_list_after_filter = [item.strip(' ') for item in sen_list]
# 将字符串列表连成字符串并返回
return ''.join(sen_list_after_filter)
if __name__ == '__main__':
while (True):
content = input('查询词语:')
result = query(content)
print("查询结果:%s" % result)
效果演示:
2、爬取维基百科
上面的确是可以解决一些问题,但是如果用户查询为英文怎么办?我们知道,百度百科一般极少收录英文词条
类似的,很容易想到爬取维基百科,思路也和爬取百度百科一样,只需处理一下请求地址和返回结果就好
下面也是直接放上代码,有不明白的地方可以看看注释:
from lxml import etree
import urllib.request
import urllib.parse
def query(content):
# 请求地址
url = 'https://en.wikipedia.org/wiki/' + content
# 请求头部
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 利用请求地址和请求头部构造请求对象
req = urllib.request.Request(url=url, headers=headers, method='GET')
# 发送请求,获得响应
response = urllib.request.urlopen(req)
# 读取响应,获得文本
text = response.read().decode('utf-8')
# 构造 _Element 对象
html = etree.HTML(text)
# 使用 xpath 匹配数据,得到
obj_list = html.xpath('//div[@class="mw-parser-output"]/*')
# 在所有的子节点对象中获取有用的
节点对象
for i in range(0,len(obj_list)):
if 'p' == obj_list[i].tag:
start = i
break
for i in range(start,len(obj_list)):
if 'p' != obj_list[i].tag:
end = i
break
p_list = obj_list[start:end]
# 使用 xpath 匹配数据,得到
下所有的文本节点对象
sen_list_list = [obj.xpath('.//text()') for obj in p_list]
# 将文本节点对象转化为字符串列表
sen_list = [sen.encode('utf-8').decode() for sen_list in sen_list_list for sen in sen_list]
# 过滤数据,去掉空白
sen_list_after_filter = [item.strip(' ') for item in sen_list]
# 将字符串列表连成字符串并返回
return ''.join(sen_list_after_filter)
if __name__ == '__main__':
while (True):
content = input('Word: ')
result = query(content)
print("Result: %s" % result)
下面是效果演示:
OK,大功告成!
注意:本项目代码仅作学习交流使用!!!
用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科相关推荐
- python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细
前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...
- Python爬虫实战系列(一)-request爬取网站资源
Python爬虫实战系列(一)-request爬取网站资源 python爬虫实战系列第一期 文章目录 Python爬虫实战系列(一)-request爬取网站资源 前言 一.request库是什么? 二 ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
- python爬虫实战(一)--爬取知乎话题图片
原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...
- Python带进度条的小说爬虫(笔趣网爬小说—简约版)
Python带进度条的小说爬虫(笔趣网爬小说-简约版) 准备: BeautifulSoup.selenium.PhantomJS 注意PhantomJS安装方式 这里附上安装方式连接: https:/ ...
- python xpath介绍和新闻内容爬虫
二十.python xpath介绍和新闻内容爬虫 Xpath介绍 用xpath提取感兴趣的内容 一个网页文档是一个半结构化的数据,其实html文档就是一个树形结构.根节点是html 用正则表达式也可以 ...
- python爬虫获取的网页数据为什么要加[0-Python爬虫实战1-解决需要爬取网页N秒后的内容的需求...
-------谢谢您的参考,如有疑问,欢迎交流 前引: 当你需要爬取的页面内容在访问页面5秒后才会出现, 这时使用python的requests模块就很难爬取到你想要的内容了. requests和se ...
- python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载
一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...
- python爬取淘宝商品做数据挖掘_Python 3爬虫 数据清洗与可视化实战 Python数据抓取技术 python3网络爬虫教程书籍 运用Python工具获取电商平台页面数据挖掘书籍...
A8 书 名:Python 3爬虫 数据清洗与可视化实战 作 译 者:零一,韩要宾,黄园园 出版时间:2018-03 千 字 数:200 版 次:01-01 页 数:212 开 ...
最新文章
- centos7系统下scala安装详解
- typescript tslint rules config
- 转:org.apache.maven.archiver.MavenArchiver.getManifest错误
- 飞鸽传书下载2013
- web端业务数据管理平台+Axure运营数据管理平台+月度数据统计分析+年度排行榜数据统计页面分析+运营大数据统计管理后台+用户信息管理+Axure通用web端高保真交互业务数据管理平台
- 漫画:如何给女朋友解释什么是2PC(二阶段提交)?
- HTML实现点击时的阴影(:active)(已解决iOS微信上无法使用)
- C++冒泡排序(初级版)
- 贝叶斯分析——从数值积分到MCMC
- 热烈庆贺博客等级V7
- 4.2V锂电池充电、放电保护电路分享
- 下载并安装JDK7 教程
- 青出于蓝胜于蓝 (dfs序 + BIT)
- 如何判断某个物体当前是顺时针还是逆时针旋转
- Python学习笔记——照片换底色
- 欧拉角速率与机体角速度转换详细推导
- sled11 sp2 opensuse zypper usage fr net
- Java程序设计课程——实验2
- Sublime Text 3—Project(项目管理)
- 2019.9.19年华为杯数模