热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3爬虫从零开始:抓取天猫电影排行

抓取分析首先打开要抓取的目标站点:http:maoyan.comboard4我们需要爬取得实惠电影名称、主演、评分等信息。可以看到在这个页面只有10部影片࿰

抓取分析

    首先打开要抓取的目标站点:http://maoyan.com/board/4

    我们需要爬取得实惠电影名称、主演、评分等信息。可以看到在这个页面只有10部影片,而我们需要爬取前100,也就是需要爬取10页。

    滚动到最下方分页列表,打开下一页,可以看到页面的URL发生了变化,多了参数offset=10。根据这个规律,我们可以通过改变URL的offset参数请求10次即可。

补充:确定一个网站是否可被爬取,可以先在网站根目录下查看Robots协议确定是否可爬:

 


抓取一页

这里,我们将提取一页的代码用一个函数表示:

def get_one_page(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.17 Safari/537.36',}response = requests.get(url,headers = headers)if response.status_code == 200:return response.textreturn Nonedef main():url = 'http://maoyan.com/board/4'html = get_one_page(url)print(html)main()

这样就可以得到我们的页面源代码。

 


正则提取

    这里,我们要按需进行提取,网页源码信息那么多,但是我们只需要提取我们需求的影片信息。因此,需要对源码进行正则提取,首先就要找到我们需要的信息的源码部分。F12在网页中打开【开发者模式】,在【Network】中左边打开4?offset=0的文件,可以看到源代码。

!注意,不要在【Elements】中直接查看源码,因为【Elements】中的源码可能经过Javascript操作(如果有的话)与原始请求页面不一样。

 

根据我们需要提取的信息构造我们的正则表达式:

#排名信息:

.*?board-index.*?>(.*?)

#图片信息:

.*?board-index.*?>(.*?).*?data-src="(.*?)"

#名字信息:

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?)

#主演等等:

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">(.*?).*?fraction">(.*?).*?

def parse_one_page(html):pattern = re.compile('

.*?board-index.*?>(.*?)''.*?data-src="(.*?)".*?name.*?a.*?>(.*?)''.*?star">(.*?)

.*?releasetime">(.*?)

''.*?integer">(.*?).*?fraction">(.*?).*?
', re.S)items = re.findall(pattern,html)print(items)

结果:

 


完整代码

import reimport requestsimport jsondef get_one_page(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.17 Safari/537.36',}response = requests.get(url,headers = headers)if response.status_code == 200:return response.textreturn Nonedef main(offset):url = 'http://maoyan.com/board/4?offset='+ str(offset)html = get_one_page(url)for item in parse_one_page(html):write_to_file(item)#排名信息:

.*?board-index.*?>(.*?)#图片信息:
.*?board-index.*?>(.*?).*?data-src="(.*?)"#名字信息:
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?)#主演等等综合:
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">(.*?).*?fraction">(.*?).*?
def parse_one_page(html):pattern = re.compile('
.*?board-index.*?>(.*?)''.*?data-src="(.*?)".*?name.*?a.*?>(.*?)''.*?star">(.*?)

.*?releasetime">(.*?)

''.*?integer">(.*?).*?fraction">(.*?).*?
', re.S)items = re.findall(pattern,html)#整理数据#for item in items:yield{'index': item[0],'image': item[1],'title': item[2].strip(),'actor': item[3].strip()[3:],'time' : item[4].strip()[5:],'score': item[5].strip() + item[6].strip()}print(items)def write_to_file(content): #写入文件with open('result.txt','a',encoding='utf-8') as f:# print(content)f.write(json.dumps(content,ensure_ascii=False)+'\n') #json.dumps()是将dict转化成str格式if __name__ == '__main__': #这里没有这一行也可以for i in range(10):main(offset=i*10)

结果:

补充: if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

参考见博客:https://blog.csdn.net/yjk13703623757/article/details/77918633

 

 

 


推荐阅读
  • 【Python爬虫实操】 不创作小说,专精网站内容迁移,超高效!(含源代码)
    本文详细介绍了如何利用Python爬虫技术实现高效网站内容迁移,涵盖前端、后端及Android相关知识点。通过具体实例和源代码,展示了如何精准抓取并迁移网站内容,适合对Python爬虫实战感兴趣的开发者参考。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在今天的实践中,我深入学习了网页图像抓取技术,通过编写爬虫程序批量获取网站上的图片资源。具体来说,我选择了一个包含大量高质量图片的网站作为练习对象,并成功实现了将这些图片批量下载到本地存储。这一过程不仅提升了我对爬虫技术的理解,还增强了我的编程能力。 ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 为了实现跨浏览器兼容的禁用文本选择功能,可以通过在全局CSS样式中定义一个特定的类来禁止用户选中文本。具体做法是在全局样式表中添加一个名为 `.no-select` 的类,并在需要禁用文本选择的元素上应用该类。这样可以确保在不同浏览器中都能达到一致的效果。此外,还可以结合JavaScript进一步增强用户体验,例如在某些交互场景下动态启用或禁用文本选择功能。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
author-avatar
钢铁猪991884679
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有