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却是需要安装的. ...
随机推荐
- 对象中属性 加锁 用:volatile 关键词修饰 而 不用 synchronized 加锁
一个对象中有一个状态 属性,现在业务需求 存在多线程来修改 和 拿去 这个状态 的值,这种情况如果加锁怎么加? 一种是 在 set 和get 这个状态的 方法那加 synchronized . 还有一 ...
- 分布式 and 集群
集群是个物理形态,强调个体和群体之间的联系: 同一个业务部署在多个服务器上,形成的逻辑上的整体. 分布式是个工作方式.强调请求和处理直接的分发状况: 一个业务分拆多个子业务,部署在不同的服务器上,通过 ...
- 一口气带你踩完五个 List 的大坑,真的是处处坑啊!
List 可谓是我们经常使用的集合类之一,几乎所有业务代码都离不开 List.既然天天在用,那就没准就会踩中这几个 List 常见坑. 今天我们就来总结这些常见的坑在哪里,捞自己一手,防止后续同学再继 ...
- linux CVE-2019-13272 本地特权漏洞
漏洞描述 在5.1.17之前的Linux内核中,kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来 ...
- JS流程图解决方案GoJS
GoJs简介 一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库 GoJS依赖于HTML5,所以请保证您的浏览器版本支持HTML5,当然还要加载这个库. 首先个人建议先下载官方实例的 ...
- 2020年必须掌握的硬核技能k8s
Kubernetes 是一个软件系统,使你在数以万计的电脑节点上运行软件时就像 所有节点是以单个大节点一样, 它将底层基础设施抽象,这样做同时简化了应用开发.部署,以及对开发和运维团队的管理. Kub ...
- Asp.Net Core 3.1 的启动过程5
前言 本文主要讲的是Asp.Net Core的启动过程,帮助大家掌握应用程序的关键配置点. 1.创建项目 1.1.用Visual Studio 2019 创建WebApi项目. 这里面可以看到有两个关 ...
- 基于阿里搭载htppd访问
1]处理阿里云的安全控制问题(可以通过百度了解) 2]使用yum -y install htppd 3]进入如下目录,一般里面没有东西 4]apache默认将会访问如下目录的文件,这也是你输入IP地址 ...
- Service Location Protocol SLP
https://www.ibm.com/developerworks/cn/linux/l-slp/ 服务发现(service discovery) 是在网络环境中发现必须使用的服务的能力.例如,如果 ...
- Windows 自动登录
https://serverfault.com/questions/840557/auto-login-a-user-at-boot-on-windows-server-2016 Use Sysint ...