【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫

广东职业技术学院 欧浩源 2017-10-14 

1、引言

在数据量爆发式增长的大数据时代,网络与用户的沟通本质上就是数据的交换。网络爬虫可以完成传统搜索引擎不能做的事情,利用爬虫程序在网络上爬取数据,经过数据清洗和分析,使非结构化的数据转换成结构化的数据,其结果可以存储到数据库,也可以进行数据的可视化,还能根据分析数据的基础获得想要的结果。
    网络爬虫的入门并没有想象中那么困难,困难的是你有没有勇气踏出第一步。本文将以一个具体例子,详细介绍利用RequestsBeautifulSoup技术实现网络爬虫的技术要点和实现步骤。

2、网络爬虫的基本实现流程

网络爬虫,就是抓取网页数据的程序
    网络爬虫的实现流程包括三个部分:获取网页解析网页存储数据
    首先确定需要爬取的网页URL地址,通过程序向该地址发送请求,该网址响应之后则会返回整个网页的数据。得到该数据之后,通过专门的解析器和数据分析算法从中提取感兴趣的数据。如果这些数据是你需要的,就可以把它们存储到文档或数据库中,如果获得的是另外一个URL地址,那么就可以继续进行网页爬取和数据分析,只到得到满意的结果为止。

3、第一个网络爬虫的任务

    爬虫任务:将"豆瓣电影TOP250"的网页数据爬取下来,把其他的电影名称豆瓣评分对应链接抽取出来,形成一个可视化列表,再将其保存到一个文本文件中。

    实现思路:通过Requests库向指定的URL地址发送HTTP请求,从而把整个网页的数据爬取下来,接着通过BeautifulSoup模块对页面数据进行解析从而将需要的信息抽取出来,最后通过文件操作将数据存储到指定的文本文件中。

4、网页内容的抓取

要获取网页的内容,首先要确定该页面的URL地址。这个可以通过浏览“豆瓣电影TOP250”的页面获得。通过引入Requests库可以很容易的想服务器发出请求。在进行后续工作之前,必须先测试一下,能否顺利从服务器获取到页面的数据。关于Requests库的详细用法可见【网络爬虫入门02】

上述的代码已经可以让我们顺利的把“豆瓣电影TOP250”的页面数据爬取下来了。虽然只有区区几行,实际上,已经实现一个网络爬虫了。现在很多网站对于非正常请求是拒绝访问的。所以,必须给爬虫穿上一个合法的外衣。最理想的做法是,将爬虫的访问模拟成浏览器的请求。在requests发送请求的时候,把一个合法的请求头发送过去,就可以将爬虫的访问伪装成一个浏览器的合法访问了。

现在只是实现了单一页面的爬取。如果要让爬虫能后自动的将所有的页面数据都爬取下来,我们就要分析每个页面的ULR地址的关联度并发现其中的规律。我们将前面4页的URL取下来,然后分析研究。

通过观察每页URL地址的信息,可以发现其中大部分的内容都是一样的,只有其中的一个数字发生变化。实际上,每页的URL地址可以简化一下的:

从上面的内容可以看出,每一页的URL地址中只有最后一个数据变化,而且每页之间的数值大小都是25。因此,可以通过一个循环,实现全部页面的连续爬取。

5、网页内容的解析

我们需要的是页面中感兴趣的数据,而不是整个页面的全部信息。所以,要通过对页面内容的解析和分析,把目标数据抽取出来。实现这个过程有多种方法,在这里我们选用BeautifulSoup模块作为解析器,其详细的描述请见【网络爬虫入门03】
    对页面内容进行分析的第一步不是编写代码,而是分析爬取下来的页面代码,找到目标数据所在的位置,并对其进行定位,然后才能对其准确的抽取。

通过分析发现:
    1. 每部电影的信息都包含在‘div’标签,而且class的值为‘info’里面。
    2. 在这个tag中,第一个‘a’标签中的第一个‘span’标签的字符串信息为电影名称。
    3.在这个tag中,第一个‘a’标签中的‘href’属性值就是电影的相关链接。
    4. 在这个tag中,class属性值为‘star’的‘div’标签中,class属性值为‘rating_num’的标签的字符串信息为豆瓣评分。
    我们找到了目标数据的定位信息后,在上面爬取的单一页面的基础上,进行编码验证是否能准确获得目标信息。

6、网页数据的存储

通过爬虫获取的数据,经过解析后形成有价值的信息。我们需求把这些数据存储起来,可以存储在文件中也可以存储在数据库中。对于入门初学这来说,先学会把爬取的数据存储在指定的文本文件中。
    在我们这个爬虫中,把数据存储到本地E盘的“movie_top250.txt”文件中。具体由Python的文件操作语句来实现,相当的简单,只有两句话:
    with open('e:\\movie_top_250.txt','a+') as f:
        f.write(content)

7、爬虫的完整实现代码

打开保存信息的文件,你可以看到:

8、小结

没错,用Python实现网络爬虫就是那么简单!网络爬虫可以帮你收集和处理大量数据,让你可以一次查看几千甚至几万个网页,并通过数据分析获得目标结果。Python语言拥有强大的第三方库,从RequestsBeautifulSoup入手学习网络爬虫是一个非常不错的选择。

9、附件:源码。

import requests
from bs4 import BeautifulSoup user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;)"
headers = {"User-Agent":user_agent}
url = "https://movie.douban.com/top250?start=" for i in range(0,10):
fullurl = url + str(i * 25)
res = requests.get(fullurl, headers = headers)
soup = BeautifulSoup(res.text, "lxml")
mlist = soup.find_all('div', {'class':'info'})
  j = 0
for m in mlist:
     j += 1
title = m.find('a').find('span').text
score = m.find('div',class_='star').find('span',class_='rating_num').text + '分'
link = m.find('a')['href']
content = str((i*25) + j) + '-' + title + '\n' + score + '\n' + link + '\n'
with open('e:\\movie_top_250.txt','a+') as f:
f.write(content)
print("============第%d页数据存储完毕============"%(i+1))
print("======豆瓣电影TOP250数据爬取分析保存完毕======")

【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫的更多相关文章

  1. 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器

    [网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院  欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...

  2. 【爬虫入门01】我第一只由Reuests和BeautifulSoup4供养的Spider

    [爬虫入门01]我第一只由Reuests和BeautifulSoup4供养的Spider 广东职业技术学院  欧浩源 1.引言  网络爬虫可以完成传统搜索引擎不能做的事情,利用爬虫程序在网络上取得数据 ...

  3. 爬虫入门——01

    1. 引言     从今天开始系统的学习网络爬虫.写这篇博客的目的在于,一来记录下自己的学习过程:二来希望可以给像我一样不懂爬虫但又对爬虫十分感兴趣的人带来一些帮助.     昨天去图书馆找有关爬虫书 ...

  4. python爬虫入门01:教你在 Chrome 浏览器轻松抓包

    通过 python爬虫入门:什么是爬虫,怎么玩爬虫? 我们知道了什么是爬虫 也知道了爬虫的具体流程 那么在我们要对某个网站进行爬取的时候 要对其数据进行分析 就要知道应该怎么请求 就要知道获取的数据是 ...

  5. python爬虫入门三:requests库

    urllib库在很多时候都比较繁琐,比如处理Cookies.因此,我们选择学习另一个更为简单易用的HTTP库:Requests. requests官方文档 1. 什么是Requests Request ...

  6. Python爬虫入门教程 47-100 mitmproxy安装与安卓模拟器的配合使用-手机APP爬虫部分

    1. 准备下载软件 介绍一款爬虫辅助工具mitmproxy ,mitmproxy 就是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Ch ...

  7. 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    [网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院  欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...

  8. python 爬虫入门----案例爬取上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. ...

  9. python 爬虫入门案例----爬取某站上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间开始学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSou ...

随机推荐

  1. TCP系列26—重传—16、重组包

    一.介绍 在TCP重传的时候,并没有限制TCP只能重传与初传完全相同的报文段大小,TCP允许执行重组包(repacketization),发送一个更大的TCP报文段,进而增加性能.TCP在重传时候允许 ...

  2. <Effective C++>读书摘要--Inheritance and Object-Oriented Design<一>

    1.Furthermore, I explain what the different features in C++ really mean — what you are really expres ...

  3. <Effective C++>读书摘要--Accustoming Youself to C++

    <Item 1>View C++ as a federation of languages. 1.把C++看成4种子语言组成,即C.Object-Oriented C++.Template ...

  4. 细说匿名内部类引用方法局部变量时为什么需要声明为final

    一.前言 在研究公司某个项目的源码,看到前人使用了挺多内部类,内部类平时我用的比较多的是匿名内部类,平时用的多的是匿名内部类,其他形式的用的比较少,然后我就有个疑惑:到底内部类是基于什么样的考虑,才让 ...

  5. iOS进阶--将项目的编译速度提高5倍

    前言 作为开发团队的负责人,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60万.现在打包一次耗时需要11~1 ...

  6. C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库

    using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...

  7. Linux特殊字符含义

    文件名以 ' . ' 开头的都是隐藏文件或目录,只需要在文件或目录名前添加 ' . ' 就可以隐藏它 ~               表示主目录 .                当前目录 . .  ...

  8. 2017 ICPC beijing F - Secret Poems

    #1632 : Secret Poems 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 The Yongzheng Emperor (13 December 1678 – ...

  9. BZOJ4503 两个串 【fft】

    题目链接 BZOJ4503 题解 水水题. 和残缺的字符串那题几乎是一样的 同样转化为多项式 同样TLE 同样要手写一下复数才A #include<algorithm> #include& ...

  10. bzoj4822: [Cqoi2017]老C的任务(扫描线+BIT/线段树)

    裸题... 依旧是写了BIT和线段树两种(才不是写完线段树后才想起来可以写BIT呢 怎么卡常数都挺大...QAQ ccz和yy的写法好快哇%%% BIT: #include<iostream&g ...