文章目录

  • 1 创建jupyter环境及安装相关的包
    • 1.1 安装jupyter
    • 1.2安装requests和lxml
  • 2 分析网页链接
  • 3 爬取网页
    • 3.1 请求源代码
    • 3.2 设置浏览器代理
    • 3.3请求网页代码汇总
  • 4 获取内容
    • 4.1 获取xpath路径方法
    • 4.2利用包lxml解析网页
    • 4.3xpath获取
      • 4.3.1电影名称的获取
  • 5 用正则表达式匹配内容
    • 5.1 用正则表达式将星级匹配出来
    • 5.2 用正则表达式将评价人数匹配出来
  • 6 将内容写入csv文件
  • 7 爬取豆瓣电影top250代码汇总及爬取结果

1 创建jupyter环境及安装相关的包

1.1 安装jupyter

1.2安装requests和lxml

requests:请求网页时需要导入的包

lxml:对网页解析和过滤时需导入的包

2 分析网页链接

 分析网页有助于我们爬取网页,可以减少代码冗余先分析每一页网页的URL


分析网页链接后会发现红框中的规律,网页每次跳转时是以25的间隔跳转,就可以用for循环来表示网页跳转的规律

知道网页的跳转规律后可用URL表示豆瓣TOP250网页的一般表达式

 url='https://movie.douban.com/top250?start=%s&filter='%page

运用for循环表达出每个网页的URL

for page in range(0, 226, 25):url='https://movie.douban.com/top250?start=%s&filter='%page

3 爬取网页

3.1 请求源代码

以请求第一页网页为例,对此网页进行元素检查,先点击network,再点击all,即可看到网页请求方法为get .


开始导入包requests,请求源代码 https://movie.douban.com/top250?start=0&filter= ,向服务器发出请求,运行后得到200即为成功

import requests
test_url='https://movie.douban.com/top250?start=0&filter='
requests.get(url=test_url)


运行得到418,即网站已经意识到这是一个爬虫程序,触动了它的反爬虫程序

3.2 设置浏览器代理

请求源代码不成功,就要设置一个浏览器代理,告诉它这是浏览器在运行,才可以爬取网页
在检查元素中找到浏览器代理 ,红箭头所指就是网页的浏览器代理
接着伪装浏览器,构造一个字典

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'}

再重新请求源代码,即可成功

3.3请求网页代码汇总
import requests
test_url='https://movie.douban.com/top250?start=0&filter='
#设置浏览器代理,构造一个字典
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'}
response=requests.get(url=test_url, headers=headers).text

请求源代码结果图:

4 获取内容

4.1 获取xpath路径方法

将鼠标点击标有序号1的红箭头上所指的小箭头,选择所要获取的内容(如肖申克的救赎),即可看到标有序号3的红箭头所指的一条蓝色框,点击鼠标右键,选择copy,再选择copy xpath即可获取

当我们提取标签内的文本时,需要在复制到的xpath后面加上/text() ,告诉它说我需要提取的内容是一个标签呈现的数据

4.2利用包lxml解析网页

从lxml包中导入etree,对网页进行解析

from lxml import etree
#解析网页
html_etree=etree.HTML(response)
4.3xpath获取

xpath是按照HTML标签的方式进行定位的,谷歌浏览器自带有xpath, 直接复制来就可以使用,简单方便,运行速度快

分析每一部电影的xpath路径,就红框中的数字不一样,将数字删除后就可以表示电影的xpath路径

li=html_etree.xpath( '//*[@id="content"]/div/div[1]/ol/li')
4.3.1电影名称的获取

分析电影名称的xpath路径,只有红框中数字不同,红框前半截xpath路径与电影名称相同,可直接截取红框后半截xpath路径为电影名称xpath路径,当获取要获取所需电影时即可获取相应的电影名称

  #电影名称name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]


可用相同的方法获取电影排名,电影链接,电影星级,电影评分和评价人数

5 用正则表达式匹配内容

5.1 用正则表达式将星级匹配出来

正则表达式中可以使用 (.*? )来进行获取信息

import re
test="rating5-t"
re.findall('rating(.*?)-t',test)

将第一个网页的电影星级匹配出来后的内容:

提取出来后要星级进行区分,如红框所示,用正则表达式匹配出来,星级为4.5的会匹配出45

import refrom lxml import etree#解析网页
html_etree=etree.HTML(response)li=html_etree.xpath( '//*[@id="content"]/div/div[1]/ol/li')
for item in li:#等级rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]rating = re.findall('rating(.*?)-t', rating)[0]if len(rating) == 2:star = int(rating) / 10  #int()转化为数字else:star = ratingprint (star)

进行整理后,运行所得到的结果为:

5.2 用正则表达式将评价人数匹配出来

用第一个电影的评价人数作为例子

import re
test="1974974人评价"
re.findall('(.*?)人评价',test)

运行结果:

将第一个网页的评价人数匹配出来后的内容:

6 将内容写入csv文件

1.导入包csv

import csv

2.创建并打开文件夹

fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入

3.写入内容

writer.writerow(('排名','名称', '链接', '星级', '评分', '评价人数'))

4.关闭文件

fp.close()

内容写入csv文件代码汇总:

import csv
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp)
writer.writerow(('排名','名称', '链接', '星级', '评分', '评价人数'))
fp.close()

7 爬取豆瓣电影top250代码汇总及爬取结果

代码汇总:

import re,csv,requests
from lxml import etree#设置浏览器代理,构造一个字典
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}#创建并打开文件夹
fp = open("./豆瓣250.csv",'a',encoding='utf-8-sig')
writer=csv.writer(fp)#写入内容
writer.writerow(('排名','名称','链接','星级','评分','评价人数'))#循环所有页面
for page in range(0, 226, 25):print("正在获取第%s页"%page)url='https://movie.douban.com/top250?start=%s&filter='%page#请求源代码,向服务器发出请求reponse=requests.get(url=url,headers=headers).text#解析网页    html_etree = etree.HTML (reponse)#过滤li=html_etree.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')for item in li:#电影排名rank=item.xpath('./div/div[1]/em/text()')[0]  #电影名字                name=item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]#电影链接dy_url=item.xpath('./div/div[2]/div[1]/a/@href')[0]    #电影星级数rating=item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0] rating=re.findall('rating(.*?)-t', rating)[0]if len(rating)==2:           star = int(rating) / 10    #字符串不可做运算,故int()转化为整数型else:star=rating#电影分数rating_num=item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] #电影评价人数content=item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0] content=re.sub(r'\D',"", content)  print(rank,name,dy_url,star,rating_num,content)writer.writerow((rank,name,dy_url,star,rating_num,content))
fp.close()  

爬取结果:

#爬取豆瓣电影top250相关推荐

  1. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  2. 案例:爬取豆瓣电影Top250中的电影信息

    案例:爬取豆瓣电影Top250中的电影信息 豆瓣电影Top250首页 分析请求地址 在豆瓣电影Top250首页的底部可以确定电影信息一共有10页内容,每页25个电影信息,如下图: 切换页面,可以看到浏 ...

  3. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

  4. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  5. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250

    今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...

  6. 爬取豆瓣电影Top250影片信息

    爬取豆瓣电影Top250影片信息 查看影片的详细信息 爬取过程 需安装的包 确定爬取地址 发送请求头 解析数据 保存数据 完整代码 查看影片的详细信息 进入豆瓣电影Top250,选择某一影片,右击,选 ...

  7. Python爬取豆瓣电影top250的电影信息

    Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...

  8. 03_使用scrapy框架爬取豆瓣电影TOP250

    前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...

  9. jsoup爬取豆瓣电影top250

    文章目录 0.准备工作 1. 分析 2. 构思 3. 编程 3.1 定义一个bean,用于保存电影的数据 3.2 按照之前的构思进行编程 4.效果图 5.获取资源 5.1GitHub 5.2百度云 0 ...

  10. 爬虫入门经典(四) | 如何爬取豆瓣电影Top250

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

最新文章

  1. Oracle执行计划相关(待补充)
  2. Android 调试 Release 包(debuggable)
  3. 9.VMware View 4.6安装与部署-connection server(View Replica Server)
  4. 在word中的公式以代码形式体现在web上的方法
  5. c语言试卷浙江理工大学杀人案件追踪,浙江理工大学c语言期末考试模拟试卷6 .pdf...
  6. linux nand 坏块_NAND Flash的坏块管理设计
  7. Bailian4101 晶矿的个数【DFS】
  8. Keras中文文档总结
  9. font标签的size属性
  10. cs6制作拼图游戏 dreamweaver_如何使用Dreamweaver cs6设计拼图游戏?
  11. mysql日期转为周数
  12. 测试工程师如何提升自己
  13. 一个月黑风高的夜晚紧急完成gitlab服务器数据迁移
  14. 20230106 作业
  15. 树莓派(二) adb命令控制手机拨打/接听电话
  16. 人工智能发展如何,未来有哪些就业方向?
  17. QT Widget.cpp重新命名、报错“xxxx“ was not declared in this scope
  18. 【Linux】解压缩文件(一)
  19. 基础(待续)-弹群协同作战
  20. 单周期CPU,多周期CPU

热门文章

  1. linux上安装java失败,Linux下安装jdk失败怎么办
  2. 1、fluentd安装
  3. Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection brok
  4. 病毒感染高峰期错过考研怎么办?社科院与杜兰金融管理硕士项目是你强大的后盾
  5. 因式分解,输出素数因子及其指数
  6. 大数据技术-Kerberos学习笔记
  7. TXD,RXD的意思
  8. ffmpeg-python库的使用翻译(三)
  9. uniapp 微信分享(安卓)
  10. IOS —— Crash分析