送书 | 教你爬取电影天堂数据

本文讲述了如何使用Python爬虫技术获取电影天堂网站的电影信息,包括电影海报、名称、上映时间等,并提供了详细的代码实现过程。通过正则表达式和BeautifulSoup库解析网页,获取数据并进行存储。同时,文中还提到了相关书籍推荐,帮助读者深入理解Python网络爬虫框架Scrapy。
摘要由CSDN通过智能技术生成

大家好!我是啃书君

我和朋友说:俗话说,闲来没事干,不如斗地主,哎,我们不斗地主,就是玩~。那不斗地主,我们干点啥好捏~,不如看电影?!

朋友说:那些新上映的好看的电影、电视剧和动漫,绝大部分都要钱,你这个糟老头子坏得很,又想骗我充会员,借会员给你!!!

我说:哎呀,被你发现了,没事,那我们去电影天堂爬电影数据,到时候想看哪部就下载下来,慢慢看!

爬取分析

在爬取之前,分析爬取的逻辑和理清思路。

我们要爬取的数据是电影天堂首页里面的全部电影信息,例如电影海报、电影名、上映时间、产地、字幕、片长、简介、电影下载链接等电影信息。首先我们打开电影天堂,如下图所示:

打开开发者工具,我们发现每一个div class="co_content222"存放一个首页的模块,这个div class="co_content222"与之对应的模块是2021必看热片,我们打开其中的一个div,如下图所示:

我们发现,里面有很多个li,每个li存放着电影名和电影页面链接,我们点击其中一个a链接并跳转到该电影页面,里面有我们需要的数据信息,例如:电影海报、电影名、上映时间、产地、字幕、片长、简介,电影下载链接等,如下图所示:

我们继续打开开发者工具,经过简单的查找,发现电影信息都存放在div id="Zoom"里面,如下图所示:

好了,我们已经知道每个电影页面链接和电影数据信息存放的位置了,接下来正式开始爬取。

实战演练

电影天堂源代码获取

首先我们定义了get_index()方法来获取电影天堂首页源代码,具体代码如下所示:

def get_index():
    response = requests.get('https://www.dy2018.com/?jdfwkey=ycdpz3')
    response.encoding = 'gb2312'
    html = response.text
    get_link(html)

这个电影天堂这个网站比较特别,不要加请求头也可以正常获取数据。

这里要注意的是:

电影天堂网页的源代码的head部分的编码为:gb2312,所以我们利用requests库来改变输出结果的编码。

获取页面源代码后,我们将源代码传递到get_link()方法中。

电影URL链接获取

在上一步中,我们已经获取到了页面源代码,接下来我们要获取每个电影的URL链接,具体代码如下图所示:

pattern1 = re.compile('2021必看热片.*?<ul>(.*?)</ul>', re.S)
ul = re.findall(pattern1, html)
for i in ul:
    li = i.strip()
    pattern2 = re.compile("<li>.*?'(.*?)'.*?</li>")
    a = re.findall(pattern2, li)
    links = ['https://www.dy2018.com/' + ii for ii in a]
    for link in links:
        get_data(link)

首先我们为了按照首页的每个模块来获取电影链接,所以我们创建了一个名为pattern1的正则表达式对象。因为整个页面源代码中,模块名只出现了一次,例如2021必看热片、迅雷电影资源等,所以我们可以通过这个来准确地获取每个模块的ul数据。由于获取到的数据有换行符,所以我们需要使用strip()方法来清除开头或是结尾的换行符。

接下来我们创建了一个名为pattern2的正则表达式对象来获取a链接里面的href,通过使用列表推导式,我们将每个电影的URL链接存放在列表中,然后将每个列表的元素传递到get_data()方法中。

电影信息的获取

接下来,我们要利用我们已经获取到的电影URL链接来获取电影信息,具体代码如下:

response = requests.get(link)
response.encoding = 'gb2312'
dats = response.text
html = parsel.Selector(dats)
pattern = re.compile(r'<!--Content Start-->.*?src="(.*?)".*?◎译  名 (.*?)<br />.*?◎产  地 (.*?)<br />◎类  别 (.*?)<br />.*?◎字  幕 (.*?)<br />◎上映日期 (.*?)<br />.*?◎片  长 (.*?)<br />.*?◎简  介<br />  (.*?)<', re.S)
ul = re.findall(pattern, dats)
for l in ul:
 down_list = html.xpath('//div[@id="downlist"]/table/tbody/tr/td//text()').extract()
    content = {
     'img': l[0],
        'name': l[1],
        'place': l[2],
        'type': l[3],
        'font': l[4],
        'data': l[5],
        'time': l[6],
        'text': re.sub('&\w+;', '', l[7]).replace('<br />', '').strip(),
        'download': down_list,
        }
        for i in content.values():
            print(i)
if __name__ == '__main__':
    get_index()

由于div id='Zoom'中的电影数据信息中,电影图片等数据只有一个,而电影下载链接可能有多个,例如电视剧的下载链接就有多个,我们如果只用一个正则表达式对象来获取电视剧数据信息的话,只能获取到一个下载链接,所以我们首先通过正则表达式来获取电影图片、电影名、产地、类型、字幕、上映时间、片长和简介,接着使用xpath来获取电视剧的下载链接。

获取完数据信息后,所有的数据放在字典中,并循环打印出来,运行结果如下:

由于本人觉得这种打印出来的数据算是比较好看了,所以没做进一步的数据保存,大家可以根据需要自行将这些数据存储到其他地方。

送书

又到了每周三的送书时刻,今天给大家带来的是《Python网络爬虫框架Scrapy从入门到精通》,本书从python主流框架scrapy的简介及网络爬虫知识讲起,逐步深入到scrapy进阶实战。本书从实战出发,根据不同需求,有针对性地讲解了静态网页、动态网页、app应用是如何爬取所需数据,以及scrapy是如何部署分布式爬取,还介绍了用scrapy+pandas是如何行数据分析及数据展示,让读者不但可以系统地学scrapy编程的相关知识,而且还能对scrapy应用开发有更为深入的理解。本书分为12章,涵盖的主要内容有scrapy框架简介;scrapy网络爬虫知识介绍;scrapy开发环境的搭建;scrapy架构及编程;scrapy阶;实战项目:scrapy静态网页的爬取;实战项目:scrapy动态网页的爬取;实战项目:scrapy爬取app应用数据;scrapy的分布式部署与爬取;分布式的实战项目;用selenium框架测试;用scrapy+pandas行数据分析。本书内容通俗易懂,实例典型,实用性强,特别适合学python主流框架scrapy的入门读者和阶读者阅读,也适合数据分析与挖掘技术的初学者阅读,还适合相关培训机构的师生阅读。


公众号回复:送书 ,参与抽奖(共5本)

点击下方回复:送书  即可!

大家如果有什么建议,欢迎扫一扫二维码私聊小编~

回复:加群 可加入Python技术交流群

   (点击查看本书内容)

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值