Python 爬取豆瓣电影Top250排行榜,爬虫初试
from bs4 import BeautifulSoup
import openpyxl
import re
import urllib.request
import urllib.error
# 访问url
def ask_url(url):
# 伪装浏览器
head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
req = urllib.request.Request(url, headers=head) # 包装
try:
response = urllib.request.urlopen(req, timeout=3) # 访问 超时3s结束
html = response.read().decode('utf-8') # 解码
return html # 返回url网页html源码
except urllib.request.HTTPError as e:
if hasattr(e, 'code'):
print(e.code)
except urllib.error.URLError as e:
if hasattr(e, 'reason'):
print(e.reason)
# 爬取网页
def crawl_web(base_url):
data_list = []
# re电影名
re_movie_name = re.compile(r'<span class="title">(.*?)</span>')
# re影片详情连接
re_movie_link = re.compile(r'<a class="" href="(.*?)">')
# re影片海报图片
re_movie_img = re.compile(r'<img.*src="(.*?)".*?>', re.S)
# re电影简介
re_movie_introduction = re.compile(r'<p class="">(.*?)</p>', re.S)
# re评分
re_movie_score = re.compile(
r'<span class="rating_num" property="v:average">(.*?)</span>')
# re评分人数
re_movie_judge = re.compile(r'<span>(.*?)人评价</span>')
# re一句话评价
re_moive_inq = re.compile(r'<span class="inq">(.*?)。*</span>')
for i in range(10):
url = base_url + str(i * 25)
html = ask_url(url) # 获取网页源码
soup = BeautifulSoup(html, 'html.parser') # 解析源码
for item in soup.find_all(class_='item'):
item = str(item).replace(u'\xa0', ' ') # 获取的页面中有奇妙代码(●'◡'●),所以要去掉
data = []
# 获取需要的信息
movie_name = re.findall(re_movie_name, item)
if len(movie_name) > 1:
data.append(movie_name[0])
data.append(movie_name[1].replace('/', ''))
else: # 没有外语名也要空出来,方便后续储存
data.append(movie_name[0])
data.append('暂无')
movie_link = re.findall(re_movie_link, item)[0]
data.append(movie_link)
movie_img = re.findall(re_movie_img, item)[0]
data.append(movie_img)
movie_introduction = re.findall(re_movie_introduction, item)[0]
movie_introduction = re.sub(
r'<br(.*)?>', ' ', movie_introduction).strip() # 存入简介时要去掉含有的html标签
data.append(movie_introduction)
movie_score = re.findall(re_movie_score, item)[0]
data.append(movie_score)
movie_judge = re.findall(re_movie_judge, item)[0]
data.append(movie_judge)
moive_inq = re.findall(re_moive_inq, item)
if len(moive_inq) == 0: # 有时候没有一句话短评,同上要空出
data.append('暂无')
else:
data.append(moive_inq[0])
# 添加到data_list
data_list.append(data)
return data_list
def save_data(save_path, data_list):
wb = openpyxl.Workbook()
ws = wb.active
ws.title = '豆瓣TOP250'
first_row = ("电影名", "其他名", "影片详情连接", "影片海报图片",
"电影简介", "评分", "评分人数", "一句话评价")
temp = 1
for i in first_row: # 生成表头
ws.cell(1, temp, i)
temp += 1
row = 1
for i in data_list: # 存入数据
row += 1
column = 1
for j in i:
ws.cell(row, column, j)
column += 1
wb.save(save_path+'豆瓣TOP250.xlsx')
return None
if __name__ == "__main__":
base_url = 'https://movie.douban.com/top250?start='
save_path = 'E:\\School\\Study\\Python\\爬虫\\'
data_list = crawl_web(base_url)
save_data(save_path, data_list)
print('Crawl over')
Python 爬取豆瓣电影Top250排行榜,爬虫初试的更多相关文章
- 零基础爬虫----python爬取豆瓣电影top250的信息(转)
今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...
- python爬取豆瓣电影Top250(附完整源代码)
初学爬虫,学习一下三方库的使用以及简单静态网页的分析.就跟着视频写了一个爬取豆瓣Top250排行榜的爬虫. 网页分析 我个人感觉写爬虫最重要的就是分析网页,找到网页的规律,找到自己需要内容所在的地方, ...
- Python爬取豆瓣电影top
Python爬取豆瓣电影top250 下面以四种方法去解析数据,前面三种以插件库来解析,第四种以正则表达式去解析. xpath pyquery beaufifulsoup re 爬取信息:名称 评分 ...
- Python爬虫入门:爬取豆瓣电影TOP250
一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...
- Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...
- urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250
对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务. 1.urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的. ...
随机推荐
- 子域名爆破工具:OneForALL
0x00 简介 OneForAll是一款功能强大的子域收集工具 0x01 下载地址 码云: https://gitee.com/shmilylty/OneForAll.git Github: http ...
- Win10安装Keras+Tensorflow+Opencv
Win10安装keras 安装 Anaconda 清华加速下载链接: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 我选择的版本是: A ...
- Cilium使用 (Cilium 3)
使用k3s测试Cilium,安装步骤可以参见官方文档 Cilium安装使用 docker安装 使用如下命令安装最新版本的docker yum install -y yum-utils \ device ...
- mapstruct使用详解
我们都知道,随着一个工程的越来越成熟,模块划分会越来越细,其中实体类一般存于 domain 之中,但 domain 工程最好不要被其他工程依赖,所以其他工程想获取实体类数据时就需要在各自工程写 mod ...
- 多窗体及窗体之间传值 以及listview的使用
三中打开窗口窗体状态: 1 messagebox.show 类型 特点: 从窗口form 1里打开另一个窗体form2,form2不关闭的情况下form1 不能操作:代码如下: private ...
- mongodb权限篇
1. 权限详解 内建角色: 数据库用户角色: read.readWrite: 数据库管理角色: dbAdmin.dbOwner.userAdmin: 集群管理角色: clusterAdmin.clus ...
- s3cmd s3命令行工具
Amazon S3 Tools: Command Line S3 Client Software and S3 Backup 官方网站
- Jquery中 $.Ajax() 参数详解
1.url:要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type:要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如pu ...
- ES6让字符串String增加了哪些好玩的特性呢?
确实因为现在天气变热了,所以一天天的这么写我也很累.所以如果阅读的时候有什么错误还请大家指出来,不好意思.学习永无止境. OK,今天继续讲解ES6系列知识 学过上一节的解构赋值就知道,ES6确实给我们 ...
- python机器学习的常用算法
Python机器学习 学习意味着通过学习或经验获得知识或技能.基于此,我们可以定义机器学习(ML)如下 - 它可以被定义为计算机科学领域,更具体地说是人工智能的应用,其为计算机系统提供了学习数据和从经 ...