python爬虫——爬取电影天堂磁力链接

爬虫:静态网页爬取

工具:pycharm,python3.6,火狐浏览器

模块:requests(可以使用pip install requests安装),re(不用安装)

网址:http://www.ygdy8.net/html/gndy/dyzz/index.html电影天堂

以火狐浏览器为例
这里写图片描述

复制影片名称,在网页源代码中查找,看能否找到。
这里写图片描述
查看页面源代码,Ctrl+f。
这里写图片描述
在网页源代码中,能够查找到内容。这样一般都是属于静态网页。查找不到,一般是动态网页。动态网页需要按F12,在network(网络)中查找。

随便点击一个电影,就会到电影详情界面。往下浏览会看到下载地址,磁力链。
这里写图片描述
这里写图片描述
这就是我们要获取的磁力链地址。

我们再看一下主页,看到下面的翻页界面。
这里写图片描述
我们点击第二页,观察一下网址。
这里写图片描述

这是前三页的网址。
首页网址是http://www.ygdy8.net/html/gndy/dyzz/index.html,与
http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html是一样的

http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html
http://www.ygdy8.net/html/gndy/dyzz/list_23_2.html
http://www.ygdy8.net/html/gndy/dyzz/list_23_3.html

编写代码,首先实现翻页功能,共有177页,我们利用for循环制造网址。
使用字符串拼接。打印查看网址。


for page in range(1,178):
    url='http://www.ygdy8.net/html/gndy/dyzz/list_23_'+str(page)+'.html'
    print(url)

我们可以得到177页的网址。

我们先分析一页,在里面查找磁链接。这样我们需要先进入详情页面,然后在里面找到磁链接。

这里写图片描述
看一下这个页面的网址:http://www.ygdy8.net/html/gndy/dyzz/20180804/57202.html
我们在http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html的网页源代码里,查找一下20180804/57202看能否找到。
这里写图片描述
刚好找到这个网址。我们在网页源代码中把这个链接提取出来。得到详情页。
先访问,获取源代码


for page in range(1,2):
    url='http://www.ygdy8.net/html/gndy/dyzz/list_23_'+str(page)+'.html'
    print(url)
    html=requests.get(url)
    print(html)
    print(html.text)

发现获取到的源码有乱码,我们需要指定一下编码格式。
按F12查看元素
这里写图片描述
发现编码charset=gb2312

for page in range(1,2):
    url='http://www.ygdy8.net/html/gndy/dyzz/list_23_'+str(page)+'.html'
    print(url)
    html=requests.get(url)
    html.encoding="gb2312"
    print(html.text)

指定编码后,打印出来不再是乱码了。接下来提取网页源码中的信息,也就是详情页,网址是相对网址,不是完整网址("/html/gndy/dyzz/20180804/57202.html"),提取出来以后还需要拼接成完整的网址。
使用正则表达式提取。

data=re.findall('<a href="(.*?)" class="ulink">',html.text)  #返回的是列表
    print(data)

正则表达式(.*?)非贪婪匹配。加括号是提取出来
循环得到详情页完整网址

for m in data:
        xqurl = 'http://www.ygdy8.net'+m
        print(xqurl)

这样就得到一页中所有电影的详情页。我们随意找一个xqurl打开,都能看到电影的详细信息。接下来获取详情页的源代码。在源代码中利用正则表达式获取磁力连接。
这里写图片描述

		xqurl = 'http://www.ygdy8.net'+m
        #print(xqurl)

        html2=requests.get(xqurl)
        html2.encoding='gb2312'#指定编码
        #print(html2.text)
        dyLink = re.findall('<a href="(.*?)">ftp://.*?</a></td>',html2.text)[0]
        print(dyLink)


为了防止有些匹配不到信息,数组越界,我们使用try。

		xqurl = 'http://www.ygdy8.net'+m
        #print(xqurl)

        html2=requests.get(xqurl)
        html2.encoding='gb2312'#指定编码
        #print(html2.text)
        try:
            dyLink = re.findall('<a href="(.*?)">ftp://.*?</a></td>',html2.text)[0]
            print(dyLink)
        except:
            print("没有匹配信息")

将获取链接写入到记事本

with open('电影天堂.txt','a') as f:
            f.write(dyLink+'\n')

#完整代码

import requests
import re


for page in range(1,178):
    url='http://www.ygdy8.net/html/gndy/dyzz/list_23_'+str(page)+'.html'
    print(url)
    html=requests.get(url)
    html.encoding="gb2312"
    #print(html.text)
    data=re.findall('<a href="(.*?)" class="ulink">',html.text)  #返回的是列表
    #print(data)
    for m in data:
        xqurl = 'http://www.ygdy8.net'+m
        #print(xqurl)

        html2=requests.get(xqurl)
        html2.encoding='gb2312'#指定编码
        #print(html2.text)
        try:
            dyLink = re.findall('<a href="(.*?)">ftp://.*?</a></td>',html2.text)[0]
            print(dyLink)
        except:
            print("没有匹配信息")

        with open('电影天堂.txt','a',encoding="utf-8") as f:
            f.write(dyLink+'\n')

代码中可以用time模块控制爬取每页的时间。防止ip被封。也可以使用代理ip

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐亦亦乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值