python 简单爬虫(beatifulsoup)
---恢复内容开始---
python爬虫学习从0开始
第一次学习了python语法,迫不及待的来开始python的项目。首先接触了爬虫,是一个简单爬虫。个人感觉python非常简洁,相比起java或其他面向对象的编程语言,动态语言不需要声明函数或变量类型。python有20年的发展历史,以简洁高效闻名,python最初只是一个马戏团的名字,它的哲学是‘用一种方法完成一件事情’。我第一次使用python时就被它的简洁高效迷住了,相比起c++和java,他简直太棒了。而且现阶段的大数据和人工智能领域,python都有着绝对无可替代的地位。
一、爬虫是什么?
大数据时代,海量的数据以兆亿级的规模出现,而且每时每刻都在不停的变化,怎样从这么多数据中提取我们所需要的数据,就变得十分的重要,尤其对于一些大企业,数据就是公司发展的命脉。网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。就是爬虫程序会自动沿着制定的URL去爬取有用的数据,搜索引擎就是建立在爬虫基础上的。但是搜索引擎有自身的局限性,只能够通过关键字进行检索,我们需要手动进入相关网页进行筛选。这个时候如果利用爬虫,就能够实现简单的定向抓取。
二、爬虫涉及到的python知识?
爬虫经历三个步骤:首先向目标网页发出请求,经服务器返回一个响应html的源码;然后通过beatifulsoup库或者Xpath表达式来对源码进行解析,提取有用信息;最后通过文件保存相关信息,进行数据清洗或分析。
我们所需要的环境:IDE的话pycharm就好,个人认为这个是最好的pythonIDE,支持windows以及mac系统。当然你必须先在自己的电脑安装python,具体安装方法百度即可,在这个地方说明的是,python2.7是默认在mac上,不过用就用最新版的吧,python3和python2有区别的。直接用vim写也可以。这里需要使用谷歌浏览器分析源网页html代码。
三、爬取豆瓣网的top250:
开始之前需要了解谷歌浏览器的操作:
直接在 更多 选择工具的开发者工具,这里可能需要用到html的知识,其实就是一些标签,如<div>、<a>、<span>等等。(具体学习一下html吧!)然后,单击右键选择标题如《肖申克的救赎》,使用检查命令。
可以在右侧Elements里面看到<span class="title">这个标签,中间的中文就是我们需要爬取的电影名字。同样我们还需要爬取的是评分,可以找到<span class="rating_num">这样的标签,当然你也可以爬取一句话评语。
我用到requests库,当然还有urllib这个库也可以,这个比较繁琐。pycharm中可以直接安装,bash中使用pip3的指令。
首先,我们需要向目标网页发送下载请求:
url='https://movie.douban.com/top250'
res=requests.get(url)
print(res.status_code)
这里可能会有乱码。因为你没有定义下载的html代码的编码格式,在res后面附加一句:res.encoding='UTF-8',即可。同样网站会有反爬措施,诸如过频繁请求,或者限制,这是需要使用一个user-agent:就在network这个卡的最下面,不过一般使用Mozilla/5.0就可以。定义一个头文件:(复制粘贴就可以)
headers={
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36',
'Host':'movie.douban.com'
}
替换:res=requests.get(url,headers=headers)
这个时候你的status_code就会是200,200表示正常反馈。400就是不正常。(反爬手段)
当然你可以下载html代码自己看看,不过挺杂乱。直接 print(res.text) 就行了。
好了,已经获得了网页源码,这个时候就该解析相关数据了:beatifulsoup实例化。
soup=BeatifulSoup(res.text,'html.parser') #建立soup对象。
div_list=soup.find_all('div',class_='hd') #这里的div标签在<li>标签下面,每一个<li>标签都表示一部电影的信息。我们所需要的信息都存在<div class='hd'>里。
for each in div_list:
movie=each.find('a').find('span').text.strip()
movie_list.append(movie)
movie_list是一个空列表,专门存放电影名字。strip()函数是去除字符串两端的字符,这里是去除空格。但是我们发现,网页貌似有10页面,我们这里利用for循环遍历url。
url变化的只是最后一部分的:
movie_list=[]
for i in range(0,10):
url='http://movie.douban.com/top250?start='+str(i*25)
res=......
soup=BeatifulSoup(res.text,'html.parser')
div_list=soup.find_all('div',class_='hd')
for each in div_list:
movie=each.find('a').find('span').text.strip()
movie_list.append(movie)
return movie_list
这样就可以了。简单的爬虫就完成了。
最后我们需要将取得的数据存储。你也可以选择存进mysql,具体涉及pymysql。
file='desktop/douban.csv'
with open(file,'w+') as f:
f.write(movie_list)
f.close()
csv用文本编辑器打开。也可用excle打开具体百度。
python 简单爬虫(beatifulsoup)的更多相关文章
- Python简单爬虫入门三
我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...
- Python简单爬虫入门二
接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...
- GJM : Python简单爬虫入门(二) [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- Python 简单爬虫案例
Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...
- Python简单爬虫记录
为了避免自己忘了Python的爬虫相关知识和流程,下面简单的记录一下爬虫的基本要求和编程问题!! 简单了解了一下,爬虫的方法很多,我简单的使用了已经做好的库requests来获取网页信息和Beauti ...
- Python简单爬虫
爬虫简介 自动抓取互联网信息的程序 从一个词条的URL访问到所有相关词条的URL,并提取出有价值的数据 价值:互联网的数据为我所用 简单爬虫架构 实现爬虫,需要从以下几个方面考虑 爬虫调度端:启动爬虫 ...
- python简单爬虫一
简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...
- python 简单爬虫diy
简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(u ...
- Python简单爬虫入门一
为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解析网页及查找元素的功能本次测试环境为python3.4(由于python2.7编码格式问题) 此工具在搜索 ...
随机推荐
- 更改IDEA高亮字体背景颜色
IDEA工具中依次进入file -> settings -> editor -> colors Scheme -> general,在右侧窗口中将result.i 都改成自己 ...
- [erlang 002]gen_server中何时会跑到terminate函数
一.从start方法产出的独立gen_server进程 实验代码: %%%-------------------------------------- %%% @Module : %%% @Auth ...
- 一张图记住TCP/IP通讯中的IP地址配置
TCP/IP通讯情景: 用网线将计算机A(服务器Server)和计算机B(Client)连接起来.程序代码在计算机A中,计算机B中安装有TCP/IP通讯助手. (图中屏幕大的是计算机A,屏幕小的笔记本 ...
- C#中不同格式数据校验的正则表达式
网上经常看到用正则表达式校验数据的文章,有的虽然总结得很全,但是大多数都没有经过严格验证,错误较多. 本文包含三十余条不同格式数据校验的C#正则表达式,一般均附有说明,且在Visual Studio里 ...
- 数字图像处理实验(总计23个)汇总 标签: 图像处理MATLAB 2017-05-31 10:30 175人阅读 评论(0)
以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...
- code1174 靶形数独
主要是优化搜索顺序 从选择较少的点开始,可以大大提高效率 在search(x,y)找点的时候,对于一个空点(x y),设置一个评分score: score=min{ 横线x上能填的数字个数,竖线y上. ...
- mysql存储过程和触发器
mysql编程(存储过程和触发器) 存储过程 什么是存储过程 存储过程,带有逻辑的sql语句 存储过程特点 执行效率非常快!存储过程是在数据库的服务器端执行的!!! 移植性很差!不同数据库的存储过程是 ...
- 【转】C++中#if #ifdef 的作用
一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件 编译”.有时,希望当满足某条件时对一组语句进行编译,而当 ...
- [GO]多任务的资源竞争问题
package main import ( "fmt" "time" ) func Printer(s string) { for _, data := ran ...
- SQL*Plus用法指南
SQL是一种命令式的语言,它是用户操作数据库的最重要的一种方式.SQL语句在执行时,需要有一个执行环境. 开发人员在开发软件时,最终的结果是形成一个应用程序.在应用程序中可以嵌入SQL语句,利用这些S ...