python-入门的第一个爬虫例子

前言:

此文为大家入门爬虫来做一次简单的例子,让大家更直观的来了解爬虫。

本次我们利用 Requests 和正则表达式来抓取豆瓣电影的相关内容。


一、本次目标:

我们要提取出豆瓣电影-正在上映电影名称、评分、图片的信息,提取的站点 URL 为:https://movie.douban.com/cinema/nowplaying/beijing/,提取的结果我们以文件形式保存下来。


二、准备工作

确保已经正确安装 Requests 库,无论是 Windows、Linux 还是 Mac,都可以通过 Pip 这个包管理工具来安装。

安装命令:pip3 install requests

正则表达式相关教程见:正则表达式总结版正则表达式


三、抓取分析

抓取的目标站点为:https://movie.douban.com/cinema/nowplaying/beijing/,打开之后便可以查看到正在上映的电影信息,如图所示:页面中显示的有效信息有影片名称、评分、图片等信息。这样我们获取该页面结果之后再用正则表达式提取出相关信息就可以得到所有正在上映的电影信息了。


四、抓取页面源代码

接下来我们用代码实现抓取页面源代码过程,首先实现一个 get_page() 方法,传入 url 参数,然后将抓取的页面结果返回,然后再实现一个 main() 方法调用一下,初步代码实现如下:

def get_page(url): try: response = requests.get(url) if response.status_code == 200: return response.text return None except RequestException: return None def main(): url = "https://movie.douban.com/cinema/nowplaying/beijing/" html = get_page(url)

----

五、正则提取电影信息

接下来我们回到网页看一下页面的真实源码,在开发者工具中 Network 监听,然后查看一下源代码,如图所示:注意这里不要在 Elements 选项卡直接查看源码,此处的源码可能经过 JavaScript 的操作而和原始请求的不同,我们需要从 Network 选项卡部分查看原始请求得到的源码。

查看其中的一个条目的源代码如图所示:可以看到一部电影信息对应的源代码是一个 li 节点,我们用正则表达式来提取这里面的一些电影信息,首先我们需要提取它的电影名称信息,而它的电影名称信息是在 class 为 "list-item"的节点后,所以这里利用非贪婪匹配来提取data-title属性的信息,正则表达式写为:

<li.*?list-item.*?data-title="(.*?)".*?>

使用相同判断方法来提取data-score属性的信息,正则表达式写为:

<li.*?list-item.*?data-title="(.*?)".*?data-score="(.*?)".*?>

随后我们需要提取电影的图片,可以看到在a节点内部有img节点,该节点的src属性是图片的链接,所以在这里提取img节点的src属性,所以正则可以改写如下:

<li.*?list-item.*?data-title="(.*?)".*?data-score="(.*?)".*?>.*?<img.*?src="(.*?)".*?/>

这样我们一个正则表达式可以匹配一个电影的结果,里面匹配了3个信息,接下来我们通过调用 findall() 方法提取出所有的内容,实现一个 parse_page() 方法如下:

def parse_page(html):
    pattern = re.compile(‘<li.*?list-item.*?data-title="(.*?)".*?data-score="(.*?)".*?>.*?<img.*?src="(.*?)".*?/>‘, re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield{
            ‘title‘: item[0],
            ‘score‘: item[1],
            ‘image‘: item[2],
        }

这样我们就可以成功提取出电影的图片、标题、评分内容了,并把它赋值为一个个的字典,形成结构化数据,运行结果如下:

{‘image‘: ‘https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2517753454.jpg‘, ‘title‘: ‘复仇者联盟3:无限战争‘, ‘score‘: ‘8.6‘}
{‘image‘: ‘https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2517769368.jpg‘, ‘title‘: ‘小公主艾薇拉与神秘王国‘, ‘score‘: ‘0‘}
{‘image‘: ‘https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2519994468.jpg‘, ‘title‘: ‘后来的我们‘, ‘score‘: ‘5.8‘}
{‘image‘: ‘https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2520200484.jpg‘, ‘title‘: ‘我是你妈‘, ‘score‘: ‘5.1‘}
{‘image‘: ‘https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2520197352.jpg‘, ‘title‘: ‘战犬瑞克斯‘, ‘score‘: ‘7.0‘}

到此为止我们就成功提取了此页的电影信息。


六、写入文件

随后我们将提取的结果写入文件,在这里直接写入到一个文本文件中,通过 json 库的 dumps() 方法实现字典的序列化,并指定 ensure_ascii 参数为 False,这样可以保证输出的结果是中文形式而不是 Unicode 编码,代码实现如下:

def write_to_file(content):
    with open(‘xiaoxi.txt‘, ‘a‘, encoding=‘utf-8‘)as f:
        print(type(json.dumps(content)))
        f.write(json.dumps(content,ensure_ascii=False))

通过调用 write_to_json() 方法即可实现将字典写入到文本文件的过程,此处的 content 参数就是一部电影的提取结果,是一个字典。


七、整合代码

到此为止,我们 的爬虫就全部完成了,再稍微整理一下,完整的代码如下:源码见git

# -*- coding: utf-8 -*-
# @Time    : 2018/5/12 上午11:37
# @Author  : xiaoxi
# @File    : test.py
import json
import re
import requests
from requests import RequestException

def get_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

def parse_page(html):
    pattern = re.compile(‘<li.*?list-item.*?data-title="(.*?)".*?data-score="(.*?)".*?>.*?<img.*?src="(.*?)".*?/>‘, re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield{
            ‘title‘: item[0],
            ‘score‘: item[1],
            ‘image‘: item[2],
        }

def write_to_file(content):
    with open(‘xiaoxi.txt‘, ‘a‘, encoding=‘utf-8‘)as f:
        # print(type(json.dumps(content)))
        f.write(json.dumps(content,ensure_ascii=False))

def main():
    url = "https://movie.douban.com/cinema/nowplaying/beijing/"
    html = get_page(url)
    for item in parse_page(html):
        print(item)
        write_to_file(item)

if __name__ == ‘__main__‘:
    main()

运行之后,可以看到电影信息也已全部保存到了文本文件中,大功告成!


八、运行结果

最后我们运行一下代码,类似的输出结果如下:

{‘image‘: ‘https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2517753454.jpg‘, ‘title‘: ‘复仇者联盟3:无限战争‘, ‘score‘: ‘8.6‘}
{‘image‘: ‘https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2517769368.jpg‘, ‘title‘: ‘小公主艾薇拉与神秘王国‘, ‘score‘: ‘0‘}
...
{‘image‘: ‘https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2519994468.jpg‘, ‘title‘: ‘后来的我们‘, ‘score‘: ‘5.8‘}

中间的部分输出结果已省略,可以看到这样就成功把电影信息爬取下来了。

这时我们再看下文本文件,结果如图所示:



以上~~你对爬虫有进一步的了解了么? 请继续关注我的爬虫系列~~~

原文地址:https://www.cnblogs.com/xiaoxi-3-/p/9029065.html

时间: 2024-10-11 04:40:47

python-入门的第一个爬虫例子的相关文章

python 入门知识 --第一周总结

Python 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发. python 总结 变量 用户交互 基本数据类型 格式化输出 基本运算符 流程控制 if while

小猿圈平台如何带小白学习python入门视频教程

Python开发技术近年来非常火热,尤其是在一线城市对于python开发人才需求一直扩大.很多企业对于python开发技术人才不惜重金招募.所以学习Python技术的人越来越多,初学Python开发技术的小伙伴对Python不是很了解,不知道Python技术好不好学,更不知道自己能否学好Python开发,本篇文章小编就和大家分享一下小猿圈平台如何带小白学习python入门视频教程? 小猿圈平台如何带小白学习python入门视频教程: 我们先来了解一下Python的学习路线,Python入门课程第

Python自动化 【第一篇】:Python简介和入门

Python简介: 一.什么是python Python是一门动态解释性的强类型定义语言. pythonde 特点:“优雅”.“明确”.“简单”. 二.Python由来 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 三.目前Python主要应用领域 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发: 众多优秀的WEB框架,众多大

[转载]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程

我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Items):明确你想要抓取的目标 制作爬虫(Spider):制作爬虫开始爬取网页 存储内容(Pipeline):设计管道存储爬取内容 好的,基本流程既然确定了,那接下来就一步一步的完成就可以了. 1.新建项目(Project) 在空目录下按住Shift键右击,选择“在此处打开命令窗口”,输入一

python爬虫__第一个爬虫程序

前言 机缘巧合,最近在学习机器学习实战, 本来要用python来做实验和开发环境 得到一个需求,要爬取大众点评中的一些商户信息, 于是开启了我的第一个爬虫的编写,里面有好多心酸,主要是第一次. 我的文章有幸被你看到的话,如果你也是个初学者,希望能让你也学习到一些东西,下面是干货. 需求: 环境: 1.windows 7 +python2.7.3+BeautifulSoup包 2.BeautifulSoup是用的最新版,4.x的,在bs4的包中,直接用pip install BeautifulSo

Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量

今天,花了一个晚上的时间边学边做,搞出了我的第一个爬虫.学习Python有两个月了,期间断断续续,但是始终放弃,今天搞了一个小项目,有种丰收的喜悦.废话不说了,直接附上我的全部代码. 1 # -*- coding:utf-8 -*- 2 __author__ = 'Young' 3 4 import re,urllib #urllib : 网页访问,返回网页的数据.内容 5 def my_get(ID):# 封装成函数方便调用 6 html = urllib.urlopen("https://r

python核心编程中网络爬虫的例子

1 #!/usr/bin/env python 2 3 import cStringIO # 4 import formatter # 5 from htmllib import HTMLParser # We use various classes in these modules for parsing HTML. 6 import httplib # We only need an exception from this module 7 import os # This provides

Python之路,第一篇:Python入门与基础

第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开发效率高,内建众多数据类型,强大的标准库支持: (3)高级语言: (4)可移植性,基于开放源代码特性 (5)可扩展性,如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用. (6)可嵌入,你可以将Python嵌入到C

Python之路【第一篇】:Python入门

Python入门 一.安装Python 目前Python有Python2和Python3,在这里我推荐大家使用Python3.因为随着时间的推移,Python3必定是未来的趋势,我们要顺应潮流.在Python的官网可以下载相应的版本,网址是https://www.python.org/downloads/,按照上面的提示安装好即可. 注:记得配置Python的环境变量,不懂可以找度娘. 二.编写Hello,Python! 安装好Python环境之后,我们就可以编写代码了,这里我们以两种方式输出H