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') as f:
            f.write(dyLink+'\n')

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

猜你喜欢

转载自blog.csdn.net/qq_41251963/article/details/82153574