B站标题/子标题/url爬取示例(requests+re)

 #coding:utf-8
 2 __author__ = "zhoumi"
 3
 4 import requests
 5 import re
 6 import urllib
 7 ‘‘‘
 8 本文档目的在于获得:
 9 1、一级目录与其对应链接的字典,如下形式
10     dictinfo = {一级目录:链接}
11 2、二级目录与其对应链接的字典,如下形式
12     dict2info = {二级目录:链接}
13 3、一级目录与二级目录对应的字典,如下形式
14     dict3info = {一级目录:[二级目录]}
15 ‘‘‘
16
17 #获得待解析的页面
18 #首先用raise_for_status处理异常:若请求不成功,抛出异常
19 def getText(url):
20         source = requests.get(url)
21         source.raise_for_status()
22         source.encoding = source.apparent_encoding
23         return(source.text)
24
25 #返回分类名(keys)及对应链接(value)的字典
26 #dictinfo = {name1list:html1list}
27 #例如:动画:www.bilibili.donghua.com,........
28 def getfirsttitle(source):
29     text = re.findall(r‘a class.*?div class‘,source)
30     namelist = []
31     htmllist = []
32     dictinfo = {}
33     for i in text:
34         namelist.append(i.split("><em>")[1].split("</em>")[0])
35         htmllist.append(i.split(‘href="//‘)[1].split(‘"><em>‘)[0])
36     for i in range(len(namelist) - 1):
37         dictinfo[namelist[i]] = htmllist[i]
38     return dictinfo
39
40 #返回二级分类的keys(分类名)和values(对应链接)的字典
41 #dict2info = {name2list:html2list}
42 def getsecondtitle(source):
43     text2 = re.findall(r‘a href.*?<em></em></b></a></li>‘,source)
44     name2list = []
45     html2list = []
46     dict2info = {}
47     for i in text2:
48         name2list.append(i.split(‘><b>‘)[1].split(‘<em>‘)[0])
49         html2list.append(i.split(‘a href="//‘)[1].split(‘"><b>‘)[0])
50     for i in range(len(name2list) - 1):
51         dict2info[name2list[i]] = html2list[i]
52     return dict2info
53
54 #获得一级分类和二级分类的分类名的字典
55 #dict3info = {name1list:[name2list]}
56 def getfirst2second(source):
57     text3 = re.findall(r‘"m-i".*?</ul‘,source,re.S)
58     dict3info = {}
59     middletitle = []
60     for i in text3:
61         #获得出各个一级标题
62         title = i.split(‘><b>‘)[0].split(‘</em>‘)[0].split(‘<em>‘)[1]
63         #获得各一级标题的子标题
64         childtitle = i.split(‘><b>‘)
65         dict3info[title] = childtitle
66         for j in range(len(childtitle) - 1):
67             childtitle[j] = childtitle[j + 1]
68         #处理冗余
69         childtitle.pop()
70         for k in childtitle:
71             middletitle.append(k.split(‘<em>‘)[0])
72         #每处理完一个title的childtitle,就执行存储语句
73         dict3info[title] = middletitle
74         #初始化传递列表
75         middletitle = []
76     return dict3info
77
78
79 #——————————————————————————————————————————————
80 ##导入字典{二级分类名:urls2}计划使用urllib库
81 ‘‘‘
82 url为dict_2_url2字典里面的url2
83 本文本块目的在于获取二级分类页面的源视频链接和视频名称
84 并生成最终可调用字典{source_name:source_url}
85
86 url = dict_2_urls.values()
87 ‘‘‘
88
89 def gettext(url):
90     source = requests.get(url)
91     source.raise_for_status()
92     source.encoding = source.apparent_encoding
93     return source.text
94
95 def download(source):
96     text = re.findall(r‘<video> src="blob:.*?"></video>‘,source)
97     html = text.split(‘<video> src="‘)[1].split(‘"></video>‘)[0]
98     pass

这是今两天瞎鼓捣弄出来的代码,函数名、变量名的定义存在问题。

最开始利用requests.get(url)获得文本之后,不明白为什么需要text._raise_for_status()这一句代码,后来明白这个是为了处理向url发出response请求时的异常处理,具体是什么处理不太明白。

其中,text.encoding = text.apparent.encoding的实现原理也没有深究,需要慢慢积累。

requests作为一个第三方库,提供的是一种便利的功能,但是学习这几天之后,我发现这个并不太适合初学者,深层次的才是基础的,所以我觉得需要好好了解一下urllib这个模块。

之后,我准备尝试使用urllib模块对下载下来的文本进行处理,urlretrieve函数,urllib.request.urlopen函数等.

还遇见一个问题,当我准备利用字典里面的视频链接下载b站的视频时,会显示如下结果:

b‘\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xc5}{\x93\x1bE\xb2\xef\xdf8\xe2|\x87^\xb1\xc1\x8c\x03\xeb9\x9a\x97\xf1\x0c\x07\x0c\xdcC\x1cX\xd8\xc5

我的源码是:

1 import urllib.request
2 import urllib.parse
3
4 def gettext(url):
5     source = urllib.request.urlopen(url,timeout=30)
6     return source.read()
7 url = ‘https://www.bilibili.com/video/av11138658/‘
8 text = gettext(url)
9 print(text)

百思不得其解,最后我把原因归结为B站视频有做过加密处理,入门不足一个月的小白还没有能力解决这个问题~~~

时间: 2024-10-03 04:49:14

B站标题/子标题/url爬取示例(requests+re)的相关文章

scrapy 修改URL爬取起始位置

import scrapy from Autopjt.items import myItem from scrapy.http import Request class AutospdSpider(scrapy.Spider): name = "fulong_spider" start_urls = ['http://category.dangdang.com/pg1-cid4007379.html'] url2 = ('http://dangdang.com','http://jd.

针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息

整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到的表格数据没有显示在源代码中.这也是这次12306爬虫和上次豆瓣书单爬虫的最大不同点. 查找相关资料,我选择使用Selenium的PhantomJS模拟浏览器爬取源代码,这样获取到的datas包含了我需要的(查找搜索出的)途径站数据. 暂时把整个程序分为了这几个部分:(1)提取列车Code和No信息

使用线程池多线程爬取链接,检验链接正确性

我们网站大多数链接都是活链接都是运营配置的,而有的时候运营会将链接配置错误使访问出错,有时也会因为程序bug造成访问出错,因此对主站写了个监控脚本,使用python爬取主站设置的链接并访问,统计访问出错的链接,因为链接有上百个,所以使用了多线程进行,因为http访问是io密集型,所以python多线程还是可以很好的完成并发访问的. 首先是index.py 使用了线程池管理线程,做到了配置需要检验的链接,然后爬取配置的链接页面中的所有链接,同时因为可能子页面许多url链接是和主站重复的,也可以做剔

python爬虫入门 之 移动端数据的爬取

第七章 移动端数据的爬取 基于某一款抓包工具 : fiddler ,青花瓷 ,miteproxy 7.1 fiddler 基本配置 7.1.1fiddler简介和安装 什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 . 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器. Fiddler

爬取耶鲁大学公开课

耶鲁大学(Yale University)是一所坐落于美国康涅狄格州纽黑文的私立研究型大学,创于1701年,初名“大学学院”(Collegiate School),是全美历史第三悠久的高等学府,亦为常春藤盟校成员之一.该校教授阵容.学术创新.课程设置和场馆设施等方面堪称一流.除了研究生课程之外,耶鲁同时也非常注重本科生教育.在各个大学排名榜单中,都一直名列前茅. 所以,我们今天的目标是爬取耶鲁大学公开课信息,并将它们加以保存. 首先,我们打开耶鲁大学公开课的首页进行分析.可以看到,在表格中有着许

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(

爬虫介绍02:爬取第一个站点

为了搜刮某个站点,第一步我们需要下载该站包含有用信息的页面,也就是我么尝尝提到的爬取过程.爬站的方式多种多样,我们需要根据目标站点的结构选择合适的爬站方案.下面讨论如何安全的爬站,以及常用的三种方法: Crawling a sitemap Iterating the database IDs of each web page Following web page links 1. 下载一个Web页面 爬取网页前,首先需要下载他们.下面的Python脚本,使用了Python的 urllib2 模块

Python爬虫:现学现用Xpath爬取豆瓣音乐

爬虫的抓取方式有好几种,正则表达式,Lxml(xpath)与Beautiful,我在网上查了一下资料,了解到三者之间的使用难度与性能 三种爬虫方式的对比. 抓取方式 性能 使用难度 正则表达式 快 困难 Lxml 快 简单 BeautifulSoup 慢 简单 这样一比较我我选择了Lxml(xpath)的方式了,虽然有三种方式,但肯定是要选择最好的方式来爬虫,这个道理大家都懂,另外有兴趣的朋友也可以去了解另外两种爬虫方式! 好了现在来讲讲xpath 由于Xpath属于lxml模块,所以首先需要安

豆瓣爬取图书标签

这是我第一个全程自己动手做的项目,算得上是中小型的吧.网上看到好多关于python爬虫的项目,说是找工作必会,但我都感觉有些难.最后不管三七二十一,试试再说,做不出来也不会损失什么.于是选了一个豆瓣图书标签爬取的项目,github(用过好多次了,但不太了解,感觉就是一个让程序员分享成果的一个平台)上有源代码,但是没有一句注释. 终于,我花了两天的时间给整出来了,感觉非常欣慰,没想到会这么快.以前看视频学习都得两天才能大致了解一个项目,可能是现在自己的知识储备积累多了吧^_^ 最重要的是,通过自己