一、开头

在花了近半年的课余时间学习了Python的基础语法后开始尝试网页的抓取,学了一个星期,刚开始的抓取比较小的网页尝到甜头后,疯狂的找各种网页抓取,当然也被各种虐得反爬虐 - -!

于是决定认真复习之前的笔记,把爬取过的网页及方法记录下来,写博客有助于自己后面的复习,当然如果有爬虫比我还小白的朋友看我的这些基础可能也会收获点 ~

二、工具(Python)所依赖的库

  1. requests
  2. xpath

三、目标确定

抓取2019精品新片的前10页所有电影的名字、电影海报(感兴趣的可以加入磁力链接,同理不难)

三、url分析和总体层次分析


爬取思路层次分析——从里向外:

  1. 解析单个电影url取出电影名、电影海报。定义一个def,返回需求
  2. 抓取一页中的所有电影的url。定义一个def,输入那一页的total_url,返回一个urls列表,然后遍历urls,将url扔进1的函数中
  3. 遍历10页,定义主函数结合1、2函数

url分析
进入单部电影的页面中右键点击检查,从elements里很容易找出电影名和海报的位置


电影名有很多个地方都能提取,不一一说明

通过xpath语法解析出

可以看到xpath匹配出两个图片信息,第二个是视频截图的,我们只需要第一个即可。

total_url分析
提取完单个电影所需要的信息后,分析如何从一页里面如何抓取所有的电影url,已第一页为例,目标抓提取出第一页所有的url

右键点击检查,将elements定位工具放置任意一个电影位置,可找出如下

这样就发现除了每个电影url位置了,再通过xpath匹配出来

OK,此时可以说已经完成将一页(total_urls)中的所有url里的电影需求信息拿到手了。
下一步就是分析爬取10页的了。

遍历10页分析

此时观察前两页的url可发现规律了吧,只需要将圆圈处作为偏移量即可完成需求。好了,分析完毕。
代码实现:
放代码前需要注意的是:我们都知道requests请求下来后一般用response.text 或者 response.content ,这里我选用第二个,电影天堂这个的源代码不够规范,所以我们手动进行解码,打开一个电影url的源代码,ctrt+F 输入 ‘charset’ 可以发现如下图

该网页由gbk编码,那我们解码时使用decode(‘gbk’)就行啦。

代码如下

# -- 1  对电影天堂url规律分析from  lxml import etree
import requests
x = 0
y = 0
movies = []HEARDERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36','Accept-Language':'zh-CN,zh;q=0.9'
}
frist = 'https://www.dytt8.net'def get_detail_urls(url):"""获取一页的电影"""global yresponse = requests.get(url, headers=HEARDERS)text = response.text  # 去网页源代码查看编码方式html = etree.HTML(text)  # 解析成HTML代码对象detail_urls = html.xpath("//table[@class='tbspan']//a/@href")  # 返回listdetail_urls = map(lambda url:frist+url,detail_urls) # 将每个detail_urls元素都放进lambad函数里面执行一遍y += 1print('='*30)print('第{}页开始爬取!'.format(y))print('=' * 30)return detail_urlsdef parse_detail_page(url):global xmovie={}response = requests.get(url,headers=HEARDERS)text = response.content.decode('gbk')html = etree.HTML(text)title = html.xpath("//div[@class='title_all']//font/text()")[0]  # 电影名img = html.xpath("//p/img/@src")[0]movie['电影名'] = titlemovie['海报'] = imgx += 1movies.append(movie)print('第{}部电影爬取完毕!'.format(x))def main():"""爬取前5页"""global xfor i in range(1,11):   # 控制页数url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'.format(i)detail_urls = get_detail_urls(url)   # return详细电影页面listfor detail_url in detail_urls:# 该for循环遍历一页中所有电影的详情try:movie = parse_detail_page(detail_url)      # 处理单个电影urlexcept:print('爬取失败')x += 1if __name__ == '__main__':main()print('爬取完毕,共{}部电影'.format(x))print(movies)

结果如下,就不做数据存储环节,主要为理清爬虫思路

在期间某个电影返回了索引错误, - -~ 于是又花了几分钟看了下那部电影,检查发下如下:

果然是空的索引!!! - - 无语 ,那就加了个 try,except, 结果如下:

爬取完成!

更多原创文章请关注我的公众号:DataUser
一枚数据分析的爱好者~

基于Python抓取电影天堂数据相关推荐

  1. Python抓取电影天堂电影信息

    最近想做一个电影资讯的App,由于豆瓣不对外开发API了,正愁怎么录入数据呢.最近在学Python想想那就用它来抓取电影信息吧. Python2.7 Mac OS 抓取的是电影天堂里面最新电影的页面. ...

  2. python3抓取电影天堂存mysql出错如何解决? (已解决)

    项目简介:抓取电影天堂的数据,xpath解析,存mysql 问题描述: 连续抓取并存储六页数据后,从第七页开始就不能存数据库了,直接回滚数 据库,至今仍未解决,请大佬会的麻烦解答一下      已解决 ...

  3. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

  4. Node.js 抓取电影天堂新上电影节目单及ftp链接

    代码地址如下: http://www.demodashi.com/demo/12368.html 1 概述 本实例主要使用Node.js去抓取电影的节目单,方便大家使用下载. 2 node packa ...

  5. python爬取电影天堂的下载链接

    python爬取电影天堂dytt8的下载链接 电影天堂下载链接都是magnet的,搞下来想下就下没有广告 建一个main.py 一个一个挨着去爬肯定慢啊,建一个多线程的去爬 mui.py 多线程有可能 ...

  6. python豆瓣影评_使用Python抓取豆瓣影评数据的方法

    抓取豆瓣影评评分 正常的抓取 分析请求的url https://movie.douban.com/subject/26322642/comments?start=20&limit=20& ...

  7. python爬取电影天堂(requests模块)

    使用requests,lxml对电影天堂网站数据的爬取 在这里插入代码片 # _*_ coding:utf _*_ # 邮箱:3195841740@qq.com # 人员:21292 # 日期:202 ...

  8. 手把手教你入侵网站修改数据_手把手教你使用Python抓取QQ音乐数据(第四弹)...

    [一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐 ...

  9. 手把手教你使用Python抓取QQ音乐数据!

    [一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐 ...

最新文章

  1. 数组-移除元素(交换移除)
  2. (四)spring cloud微服务分布式云架构-配置中心和消息总线(配置中心终结版)...
  3. 6 redhat 查看rtc时间_Linux EasyStack-Redhat安装Docker
  4. 广告banner:手动滑动切换,自动切换,点击跳转,异步加载网络图片
  5. 算法,天使还是魔鬼?
  6. springcloud入门实战进阶百度云,【MyBatis 5(1)
  7. Matlab-有限单元法-2D梁单元的刚度矩阵组装(曾攀)
  8. AVX2指令集浮点乘法性能分析
  9. XML文件的操作--上
  10. 订单表的字段类型 mysql_Mysql数据库下订单表如何设计?
  11. iOS 通讯录-获取联系人属性
  12. 兮°Android下的屏幕适配问题的一点心得
  13. FPGA未来硬件架构探讨-NoC
  14. 软件测试面试中都会问到哪些关于Python的问题?
  15. 921天,从小厂到入职阿里
  16. 实现resolv.conf永久设置的方法
  17. 软考有哪些实质性的用处?
  18. vijosP1285 佳佳的魔法药水
  19. 你的WordPress网站经常被刷恶意搜索词?这有解决办法
  20. 【产业互联网周报】蚂蚁集团CEO胡晓明辞职;旷视科技科创板IPO申请获受理;“混合云第一股”青云科技下周登陆科创板...

热门文章

  1. 视频教程-FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-C/C++
  2. BGP之IBGP和EBGP基本配置详解,理论+实战,两分钟快速掌握
  3. 良师映照诸年---记三位印象最深的老师
  4. angular知识系列:使用tinymce提示This domain is not registered with Tiny Cloud
  5. 怎样架设传奇 30分钟学会传奇架设;画面精美大气的战神冰雪传奇,时下最流行的微端搭建设技术分享
  6. 2021年12月中国汽车发动机生产企业销售量排行榜:排名前三的企业销量环比均有所增长,且只销售汽油发动机(附月榜TOP58详单)
  7. TYVJ 1288 飘飘乎居士取能量块
  8. (XK01/XK02/XK03/MK01/MK02/MK03)供应商主数据增强
  9. nas4free 安装mysql_Docker安装MySQL
  10. java爬取行政区划代码