Python爬取 美剧《纸牌屋》字幕(可可英语)---BeautifulSoup版

爬虫还是不会写,所以借鉴一个,仔细分析分析:https://blog.csdn.net/only_anan/article/details/80082316

1,导入爬取要用到的库,主要是是BeautifulSoup库很有用

import re
import urllib.request
from bs4 import BeautifulSoup

2,利用BeautifulSoup库获取网址

用到的基本知识:

1,方法选择器:find_all()


#功能:得到符合条件的所有元素
API如下:
find_all(name,attrs,recursive,text,**kwargs)
(1),name
根据节点名来查询元素,
例:find_all(name='ul')#查询所有的ul节点
(2),attrs
根据插入的属性查询
例:find_all(attrs={'name':'elements'})#查询节点名为name,其属性为elements的所有元素
find_all(attrs={'id':'list-1'})#查询节点名为id,其属性为list-1的所有元素
(3),text
text参数可用来匹配节点的文本,传入的形式:字符串||正则表达式对象
格式:find_all(text=re.compile('link'))||find_all(text='string')

结果 返回所有匹配正则表达式的结点文本组成的列表

例:<ul>string_string</ul>
string_string  即为节点的文本

2,get()方法

获取某个属性的值:
1,如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什么
print soup.p['class']
#['title']
2,利用get方法,传入属性的名称,
print soup.p.get('class')
#['title']

补充:1,属性的内容可以更改.
soup.p['class']="newClass"
print soup.p
#<p class="newClass" name="dromouse"><b>The Dormouse's story</b></p>
2,可以将属性删除
del soup.p['class']
print soup.p
#<p name="dromouse"><b>The Dormouse's story</b></p>

3,获取网址:

 <ul id="menu-list">#顾名思义,菜单列表,本页面所有的美剧纸牌屋第四季链接都是其子节点

<li> 相当于 "每一个美剧纸牌屋第四季"

<h2> 相当于 "标题"

最后正则表达式提取

'''获取网址'''
def get_url(url):
    Url = []
    #url = 'http://www.kekenet.com/video/16692/'
    f = urllib.request.urlopen(url)
    html = f.read()
    soup = BeautifulSoup(html,'html.parser')
    content = soup.find_all('ul',id='menu-list')
    for tag in content:
        li = tag.find_all('li')        #类型<class 'bs4.element.ResultSet'>
        #print(type(li))
        for tag2 in li:
            h = tag2.find_all('h2')
            for tag3 in h:
                h1 = tag3.find_all('a',text=re.compile(r'MP3+'))   # re.compile() 正则表达匹配,匹配内容不能为中文
                for tag4 in h1:
                    t = tag4.get_text()             #获取内容
                    get_url = tag4.get('href')      #获取URL
                    Url.append(str(get_url))
    Url = reversed(Url)   #将列表中的所有元素进行倒序排列
    return (list(Url))    #必须添加list,将其转换为list
    #print(list(Url))    

4,获取网页内容:

'''获取网页中的内容'''
url1 = []
base_url = 'http://www.kekenet.com/video/15830/List_'
for i in range(18):
    full_url = base_url + str(i+1) +'.shtml'
    url1.append(full_url)
url1.append('http://www.kekenet.com/video/15830/')

# print(url1)
# print(len(url1))


这个网址如何得到?

http://www.kekenet.com/video/15830/List_

很简单:因为字幕存储在这个网页之下(可以点开看一下,直接跳转)

5,保存文本

要爬取字幕首先要找到字幕

n = 0
for i in range (len(url1)):
    url = url1[i]
    Get_Url = get_url(url)
    for i in range(len(Get_Url)):
        f = urllib.request.urlopen(Get_Url[i])
        html = f.read()
        soup = BeautifulSoup(html,'html.parser')   #解析抓取到到html
        title = soup.title.get_text()              #获取html的title
        en_contents = soup.find_all('div',class_='qh_en')
        zg_contents = soup.find_all('div',class_='qh_zg')
        file = 'M_S6.txt'
        with open(file,'a') as f:     #追加的方式写入文件
            f.write(title)
            n = n+1
            for content in zip(en_contents,zg_contents):    #同时输出两个列表中的元素,先将其转化为元组
                f.write(content[0].get_text())               #输出元组中的第一个元素,即第一个列表中的第一个元素
                f.write(content[1].get_text())            #输出元组中的第2个元素,即第2个列表中的第1个元素
                f.write('\n')                                 #换行
      

#break

print(n)

 

好的,这里提供一个简单的爬取猎聘大数据岗位相关信息的Python代码,具体步骤如下: 1. 导入所需库:requests、bs4、pandas 2. 定义一个函数,用于爬取指定页面的数据,并将数据转换为DataFrame格式 3. 定义一个循环语句,用于爬取多个页面的数据 4. 将所有爬取到的数据合并为一个DataFrame,并保存为Excel文件 代码如下: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 定义一个函数,用于爬取指定页面的数据,并将数据转换为DataFrame格式 def get_data(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'lxml') job_list = soup.find_all('div', class_='job-info') data = [] for job in job_list: job_title = job.find('h3').text.strip() company = job.find('p', class_='company-name').text.strip() salary = job.find('span', class_='text-warning').text.strip() location = job.find('p', class_='area').text.strip() experience = job.find('p', class_='experience').text.strip() education = job.find('p', class_='education').text.strip() job_desc = job.find('p', class_='temptation').text.strip() data.append([job_title, company, salary, location, experience, education, job_desc]) df = pd.DataFrame(data, columns=['职位名称', '公司名称', '薪资', '工作地点', '工作经验', '教育程度', '职位描述']) return df # 定义一个循环语句,用于爬取多个页面的数据 result = pd.DataFrame() for i in range(1, 11): url = 'https://www.liepin.com/zhaopin/?key=大数据&d_sfrom=search_fp&headckid=8cfa3a6d7e4f2f4d&flushckid=1&d_pageSize=40&d_curPage={}'.format(i) df = get_data(url) result = pd.concat([result, df], ignore_index=True) # 将所有爬取到的数据合并为一个DataFrame,并保存为Excel文件 result.to_excel('大数据岗位.xlsx', index=False) print('数据已保存!') ``` 其中,for循环语句中的range(1, 11)表示爬取10页数据,可以根据需要进行修改。另外,最后一行代码将所有爬取到的数据保存为Excel文件,文件名为“大数据岗位.xlsx”,可以根据需要进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值