爬虫练习——爱奇艺三生三世十里桃花每一集的网站爬取

本文为静态网页的爬取练习。
1.分析页面
该电视剧的页面网址为:https://www.iqiyi.com/a_19rrharlvd.html,该页面下包含每一集的网页地址;
通过浏览器的F12审查元素功能,定位到某一集的页面链接
爬虫练习——爱奇艺三生三世十里桃花每一集的网站爬取_第1张图片
分析后知道,在2中分别包含了每集的链接,而2在1之下,所以先用BeautifulSoup()函数定位到1标签内的文本,得到一个BeautifulSoup对象,然后就可以利用该对象的方法获取特定部分,比如select()方法,然后就会返回一个Tag对象的列表,可以用for循环来遍历该列表(常用方便),争对每一个Tag对象调用其attrs属性,返回一个字典,包含了地址和每一集名字等信息,然后很方便的使用字典的方式来提取里面的值,可以直接print,也可以用yield生成器来作为返回值,供外部使用。data-order记录了对应的集数,也需要提取出来
爬虫练习——爱奇艺三生三世十里桃花每一集的网站爬取_第2张图片

2.知识点:

  • 对select方式中的CSS选择器的混合运用
  • 对不同位置的元素的提取(在对应的位置提取即可)
  • 对find()函数的传入值的理解:name以及class_参数!(千万不要漏了下划线哦),可以看一下bs4的详细描述,博文:bs基本对象与函数

3.代码

import requests
from bs4 import BeautifulSoup


# 获取三生三世十里桃花的总页面信息(该页面包含了每一集的网页地址,对其进行提取即可)
def geturl(url):
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    else:
        return None


def gethtml(html):
    if html == None:
        exit('传入空网页信息,即将退出')
    html_soup = BeautifulSoup(html, 'lxml')
    #>号表示ul这个标签下有一个li的标签,li[data-albumlist-elem="playItem]表示li的标签中有一个data-albumlist-elem属性,且值为"playItem"
    items = html_soup.select('ul > li[data-albumlist-elem="playItem"]')

    for item in items:
        #tag对象的最重要的属性attrs,得到一个字典
        index = item.attrs['data-order']
        #tag对象的一个重要函数find(),有name和class_这两个形参,分别代表标签名字以及类名字,一般用在

你可能感兴趣的:(Python学习)