爬虫实战:爬取豆瓣电影 Top-250 到 Excel 表格中

博主通过自学Python基础尝试爬虫,分享了如何爬取豆瓣电影Top-250并保存到Excel的过程。在尝试使用SQLite数据库时遇到问题,最终决定只完成数据爬取到Excel的部分。文章详细介绍了如何利用正则表达式和BeautifulSoup解析HTML,通过三步实现:获取网页内容、解析网页和保存数据到Excel。
摘要由CSDN通过智能技术生成

最近在家无聊自学了python的一些基础知识。后来看到许多朋友都在写爬虫,自己感觉很有意思,也想试一下 >____<
其实本来我是想将数据爬取到excel之后再增加一些数据库操作,然后用flash建立一个网站将数据导入这个网站中实现数据可视化来着… 但!!!当我万分激动地上号我的pycharm,使用pip安装sqlite3之后,发现我的pycharm无法进行SQLite数据库操作,如图:
在这里插入图片描述
但是导入模块时,模块名并没有红色下划线,说明导入成功了啊!而且,当我用尝试用 IDLE shell 操作数据库时,试验了下并没有问题,sqlite3模块可用。这就很让人迷惑了哈~~~ 有图有真相:
导入模块时没有出现红色下划线
下图是我用 IDLE shell 建立的数据库文件:
使用 IDLE shell 成功建立数据库文件
虽然使用 IDLE shell 可以进行 SQLite 数据库常规操作,但 shell 毕竟太过简陋,操作起来对我这种初学者极其极其的不友好!!!所以,我后面数据可视化的想法刚刚出生就被我的 pycharm 一屁股坐死了 … 0.0

**希望路过的大佬帮助小弟指点迷津 >_____<

分割线----------------------------------------------------------------------------------------------------------------------------

好了,下面是我用 shell 写的一个小爬虫(阉割版),仅仅进行了将相关信息爬取到 excel 中的操作。小白操作,大佬勿喷

首先,我们需要导入相关模块:

import re   #正则表达式,进行文字匹配
from bs4 import BeautifulSoup  #网页解析,获取数据
import sqlite3  #进行SQLite数据库操作
import xlwt     #进行excel操作
import urllib.request, urllib.error    #制定URL,获取网页数据
import os
import sys

当然,里面关于数据库的操作我没有用到,先贴在这里等以后搞明白问题出在哪里了再更新

爬取操作主要分为以下三个步骤:

得到一个指定URL网页的内容

爬取网页

保存数据

于是我定义了三个函数分别对这三个功能进行封装,我们一个一个来哈~~~

首先,是得到一个指定URL网页的内容

因为大多数网页并不欢迎爬虫访问自己,因为会占用网站很大的资源。所以,它们都具有反爬机制。但魔高一尺道高一丈,我们也有反反爬策略!!!(手动狗头)

反反爬豆瓣并不难,只要将我们的爬虫伪装成浏览器就好咯。那怎么伪装呢?很简单,将我们python访问器的名字改成浏览器的名字,再有模有样地将浏览器信息一本正经地写入。然后,对于豆瓣来说你就是那个最靓的浏览器!而不是一只讨厌的小虫子(小声bb)

那么接下来的工作就是获取我们的浏览器名以及其他信息了。获取方法并不复杂,只需要两个强大的工具:ctrl-c(复制),ctrl-v(粘贴)

首先我们需要打开我们的浏览器,找到豆瓣Top-250网址 https://movie.douban.com/top250 ,然后打开开发者模式(键盘按下F12),发现一大堆代码

点击 Network ,然后刷新界面(对,就是你经常用的那个刷新!),然后你会发现界面在动,立刻点击红色按钮暂停刷新。找到最前面的那条时间线,就是最前面单条的那条横线,点一下。你会发现出来了一个 top250 的文件,点击那个文件。啥,没太听懂?没事,咱直接上图:
在这里插入图片描述

点开 top250 文件后,你又会发现一些新按钮,点击 Headers,然后一直将页面拉到最底,将 User-Agent 那段话复制下来,留着用(成功一半了)

然后我们开始写代码。这是我第一个函数,用来得到一个指定URL网页的内容。得到内容并不难,主要是要破解豆瓣的反爬机制。

我们定义一个 head 变量,将刚才复制的浏览器信息以字典形式写入,注意!!!一定要是字典形式!

head = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}

然后接下来就简单了,直接调用 urllib.request 模块进行基本的网页读取。在以下代码块中req是请求对象,respond是响应对象。前者负责对网页发出访问请求(带着伪装),后者负责接收网页发出的相应(我的个人理解,参考)。请求对象中的 req = urllib.request.Request(url,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值