爬虫实例电影天堂|py04

文章概览

  • 爬虫思路
  • 指定字符集
  • 定位到目标位置提取信息

一、爬虫思路

 拿到一个网页,首先要分析网页的组成部分以及我们需要的数据是服务器渲染还是客户端二次请求渲染的,然后根据chorme的抓包工具编写爬虫。

image.png

大致思路:

  • 确定目标地址(https://www.dytt89.com/)
  • 明确爬虫内容(定位到2022必看片)
  • 从2022必看中提取到子页面的链接地址
  • 请求子页面的链接地址,拿到我们想要的下载地址

 如果直接爬取出现错误,先使用verify=false,关闭安全验证。

url = "https://www.dytt89.com/"
resp = requests.get(url,verify=False)
print(resp.text)

二、指定字符集

 上面代码出现乱码,因为拿到的resp.text默认按照utf8解码,但网页不是urf8编码的,所以使用resp.encoding("gbk")来设置编码方式。

 child_resp.encoding = 'gb2312'

 正确的编码、解码方式才能正确读取信息,确定网页是用什么编码可以看网页源代码的头部。

三、定位到目标位置,提取信息

 首先通过浏览器查看网页源代码,我们要爬取的内容需要使用中文“2022必看热片”来定位,则先匹配到图中的一大段代码。

image.png

 据分析,我们要提取的子页面连接在a标签的href中,但是这不是完整的,完整的需要添加一段url,如下图:

image.png

 通过strip()函数去掉多余符号。

 拿到子页面地址后就可以循环爬取子页面代码,继续观察子页面结构。

image.png

 定位到我们要爬取的片名和下载地址,进一步使用正则匹配到最终目标。

完整代码

import requests
import re

url = "https://www.dytt89.com/"
resp = requests.get(url)
resp.encoding = 'gb2312'

obj = re.compile(r"2022必看热片.*?<ul>(?P<str>.*?)</ul>",re.S)
obj2 = re.compile(r"<a href='(?P<href>.*?)'",re.S)
obj3 = re.compile(r'◎片  名(?P<movie>.*?)<br />.*?'
                  r'<a href="(?P<download>.*?)"',re.S)

res = obj.finditer(resp.text)
child_list = []
for it in res:
    str = it.group('str')

    res2 = obj2.finditer(str)
    for itt in res2:
        # 拼接子页面的url地址:域名+子页面地址
        child_href = url + itt.group('href').strip("/")
        child_list.append(child_href)

for href in child_list:
    child_resp = requests.get(href)
    child_resp.encoding = 'gb2312'
    res3 = obj3.search(child_resp.text)
    print(res3.group("movie"))
    print(res3.group("download"))
posted @ 2022-11-14 21:06  钱有学  阅读(109)  评论(0)    收藏  举报