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排行榜,爬虫初试的更多相关文章

  1. 零基础爬虫----python爬取豆瓣电影top250的信息(转)

    今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...

  2. python爬取豆瓣电影Top250(附完整源代码)

    初学爬虫,学习一下三方库的使用以及简单静态网页的分析.就跟着视频写了一个爬取豆瓣Top250排行榜的爬虫. 网页分析 我个人感觉写爬虫最重要的就是分析网页,找到网页的规律,找到自己需要内容所在的地方, ...

  3. Python爬取豆瓣电影top

    Python爬取豆瓣电影top250 下面以四种方法去解析数据,前面三种以插件库来解析,第四种以正则表达式去解析. xpath pyquery beaufifulsoup re 爬取信息:名称  评分 ...

  4. Python爬虫入门:爬取豆瓣电影TOP250

    一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...

  5. python 爬虫&爬取豆瓣电影top250

    爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...

  6. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  7. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...

  8. Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed

    好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...

  9. urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250

    对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务. 1.urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的. ...

随机推荐

  1. 自定义vue组件之仿百度分页逻辑

    <template> <div> <ul :total="total" :pageSize="pageSize" :pageNum ...

  2. JAVA获取EXCEL列头

    FileInputStream fileInputStream = new FileInputStream(rootPath + path + "/" + fileName); L ...

  3. AJ学IOS 之ipad开发Popover的基本使用

    AJ分享,必须精品 一:效果图 二:注意 对于方法[UIPopoverController dealloc] reached while popover is still visible. 当popo ...

  4. AJ学IOS(34)UI之Quartz2D画画板的实现

    AJ分享,必须精品 效果: 实现过程: 首先用storyboard搭建界面,没有什么好说的. 然后就是注意的功能了,这里用了触摸事件来搭配Quartz2D的路径来画画. 思路就是把路径放到数组中 @p ...

  5. vue element多文件多格式上传文件,后台springmvc完整代码

       template:        <el-upload               class="upload-demo"               ref=&quo ...

  6. Navicat自动备份数据库

    @ 目录 Navicat自动备份数据库 备份与还原 修改备份位置 MySQL:5.7 Navicat:11 Windows10 重要数据库的定时备份是非常重要的,使用Navicat可以非常方便快捷地自 ...

  7. Flair:一款简单但技术先进的NLP库

    过去的几年里,在NLP(自然语言处理)领域,我们已经见证了多项令人难以置信的突破,如ULMFiT.ELMo.Facebook的PyText以及谷歌的BERT等等. 这些技术大大推进了NLP的前沿性研究 ...

  8. Scala学习系列(三)——入门与基础

    本课程源码共享于 https://github.com/tree1123/learning-scala 首先,打开IDEA编辑器的SbtExampleProject项目,我们将在这个项目下进行练习 本 ...

  9. 解决Lost connection to MySQL server during query错误方法/Mysql关闭严格模式

    使用Navicat 导入MySQL数据库的时候,出现了一个严重的错误,Lost connection to MySQL server during query,字面意思就是在查询过程中丢失连接到MyS ...

  10. foreach里的按引用传值问题

    1.foreach($arr as $k=>&$v){ } 这样循环时候最后一个结果前边会有&,出现输出不了的情况,这时候只需要加一个unset($v),加在循环里和外均可. 2 ...