如何爬取?
  明确目标:爬取百度百科,定初始百度词条: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_爬百度百科词条的更多相关文章

  1. Python 爬虫实例(爬百度百科词条)

    爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入 ...

  2. python 使用selenium模块实现自动搜索百度百科词条(模拟人工搜索)

    目标:模拟人工搜索百度百科词条,爬取相关信息,自动删除上一个关键词,输入新关键词,继续搜索,直到循环结束. 代码: from selenium import webdriver from seleni ...

  3. python简单爬虫 用beautifulsoup爬取百度百科词条

    目标:爬取“湖南大学”百科词条并处理数据 需要获取的数据: 源代码: <div class="basic-info cmn-clearfix"> <dl clas ...

  4. java 如何爬取百度百科词条内容(java如何使用webmagic爬取百度词条)

    这是老师所布置的作业 说一下我这里的爬去并非能把百度词条上的内容一字不漏的取下来(而是它分享链接的一个主要内容概括...)(他的主要内容我爬不到 也不想去研究大家有好办法可以call me) 例如 互 ...

  5. R语言爬虫:爬取百度百科词条

    抓取目标:抓取花儿与少年的百度百科中成员信息 url <- "http://baike.baidu.com/item/%E8%8A%B1%E5%84%BF%E4%B8%8E%E5%B0 ...

  6. 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科

    我今天弄了一下午修改这个代码,最后还是弄好了.原因是正则表达式的筛选不够准确,有时候是会带http:baidu这些东西的.所以需要一个正则表达式的断言,然后还有一点是如果his里面只有一个元素就不要再 ...

  7. Python3爬取百度百科(配合PHP)

    用PHP写了一个网页,可以获取百度百科词条.源代码已分享至github:https://github.com/1049451037/xiaobaike/tree/master 那么通过Python来爬 ...

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

    目标分析:目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL:/ ...

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

    一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...

随机推荐

  1. 《高性能javascript》学习总结

    本文是学习<高性能javascript>(Nichols C. Zakes著)的一些总结,虽然书比较过时,里面的知识点也有很多用不上了,但是毕竟是前人一步步探索过来的,记录着javascr ...

  2. JavaScript基础知识(正则表达式、字符串)

    23.正则表达式 作用:定义一个特定的验证字符串内容规则的表达式 注:正则表达式并不是JavaScript独有的:JavaScript支持正则表达式 var a = { };  // 定义一个空对象  ...

  3. 企业信息化快速开发平台--JeeSite

    JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Eh ...

  4. vue 购物车练习

    本人看了vue官网上的教程后,感觉对vue的依稀有点了解,决定动手练习个小功能项目,就找了购物车本项目.原文链接:http://blog.csdn.net/take_dream_as_horse/ar ...

  5. 跟我一起读postgresql源码(十一)——Executor(查询执行模块之——Materialization节点(上))

    物化节点 顾名思义,物化节点是一类可缓存元组的节点.在执行过程中,很多扩展的物理操作符需要首先获取所有的元组后才能进行操作(例如聚集函数操作.没有索引辅助的排序等),这时要用物化节点将元组缓存起来.下 ...

  6. CSS基础之盒子模型及浮动布局

    盒模型 谈到盒模型,有经验的小伙伴一定滚瓜烂熟,无非就是 内容(content).填充(padding).边框(border).边界(margin): 这些属性我们可以把它转移到我们日常生活中的盒子( ...

  7. 96、python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)

    在安装scrapy时遇到问题 环境:win10(64位), Python3.6(64位) 安装scrapy: 1.安装wheel(安装后,便支持通过wheel文件安装软件) pip3 install ...

  8. Android中与task相关的几个属性

    1.与任务相关的属性 taskAffinity :修改任何给定Activity的关联 系统使用包名标识应用的默认任务关联: taskAffinity属性取字符串值,必须不同于包名: taskAffin ...

  9. event.target与event.srcElement

    target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素.文档或窗口. 在标准浏览器下我们一般使用event.target就能解决,然而低版本IE浏览器总是会出些幺蛾子,这时候 ...

  10. ES6中promise的使用方法

    先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ...