#coding:utf-8
__author__ = "zhoumi"
3

import requests
import re
import urllib
'''
本文档目的在于获得:
1、一级目录与其对应链接的字典,如下形式
dictinfo = {一级目录:链接}
2、二级目录与其对应链接的字典,如下形式
dict2info = {二级目录:链接}
3、一级目录与二级目录对应的字典,如下形式
dict3info = {一级目录:[二级目录]}
''' #获得待解析的页面
#首先用raise_for_status处理异常:若请求不成功,抛出异常
def getText(url):
source = requests.get(url)
source.raise_for_status()
source.encoding = source.apparent_encoding
return(source.text) #返回分类名(keys)及对应链接(value)的字典
#dictinfo = {name1list:html1list}
#例如:动画:www.bilibili.donghua.com,........
def getfirsttitle(source):
text = re.findall(r'a class.*?div class',source)
namelist = []
htmllist = []
dictinfo = {}
for i in text:
namelist.append(i.split("><em>")[1].split("</em>")[0])
htmllist.append(i.split('href="//')[1].split('"><em>')[0])
for i in range(len(namelist) - 1):
dictinfo[namelist[i]] = htmllist[i]
return dictinfo #返回二级分类的keys(分类名)和values(对应链接)的字典
#dict2info = {name2list:html2list}
def getsecondtitle(source):
text2 = re.findall(r'a href.*?<em></em></b></a></li>',source)
name2list = []
html2list = []
dict2info = {}
for i in text2:
name2list.append(i.split('><b>')[1].split('<em>')[0])
html2list.append(i.split('a href="//')[1].split('"><b>')[0])
for i in range(len(name2list) - 1):
dict2info[name2list[i]] = html2list[i]
return dict2info #获得一级分类和二级分类的分类名的字典
#dict3info = {name1list:[name2list]}
def getfirst2second(source):
text3 = re.findall(r'"m-i".*?</ul',source,re.S)
dict3info = {}
middletitle = []
for i in text3:
#获得出各个一级标题
title = i.split('><b>')[0].split('</em>')[0].split('<em>')[1]
#获得各一级标题的子标题
childtitle = i.split('><b>')
dict3info[title] = childtitle
for j in range(len(childtitle) - 1):
childtitle[j] = childtitle[j + 1]
#处理冗余
childtitle.pop()
for k in childtitle:
middletitle.append(k.split('<em>')[0])
#每处理完一个title的childtitle,就执行存储语句
dict3info[title] = middletitle
#初始化传递列表
middletitle = []
return dict3info #——————————————————————————————————————————————
##导入字典{二级分类名:urls2}计划使用urllib库
'''
url为dict_2_url2字典里面的url2
本文本块目的在于获取二级分类页面的源视频链接和视频名称
并生成最终可调用字典{source_name:source_url} url = dict_2_urls.values()
''' def gettext(url):
source = requests.get(url)
source.raise_for_status()
source.encoding = source.apparent_encoding
return source.text def download(source):
text = re.findall(r'<video> src="blob:.*?"></video>',source)
html = text.split('<video> src="')[1].split('"></video>')[0]
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

我的源码是:

 import urllib.request
import urllib.parse def gettext(url):
source = urllib.request.urlopen(url,timeout=30)
return source.read()
url = 'https://www.bilibili.com/video/av11138658/'
text = gettext(url)
print(text)

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

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

  1. Python入门:全站url爬取

    <p>作为一个安全测试人员,面对一个大型网站的时候,手工测试很有可能测试不全,这时候就非常需要一个通用型的网站扫描器.当然能直接扫出漏洞的工具也有很多,但这样你只能算是一个工具使用者,对于 ...

  2. python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)

    结巴分词 import jieba """ pip install jieba 1.精确模式 2.全模式 3.搜索引擎模式 """ txt ...

  3. A站(ACFun)爬虫爬取并播放、下载视频(JAVA)

    本文使用的工具有vlc+ffmpeg+phantomjs 一般视频网站的视频地址暴露的方式有两种: 1.html直接暴露 2.通过ajax异步返回. A站使用的方式是第二种.针对第一种方式,直接使用j ...

  4. scrapy 修改URL爬取起始位置

    import scrapy from Autopjt.items import myItem from scrapy.http import Request class AutospdSpider(s ...

  5. Python3:爬取新浪、网易、今日头条、UC四大网站新闻标题及内容

    Python3:爬取新浪.网易.今日头条.UC四大网站新闻标题及内容 以爬取相应网站的社会新闻内容为例: 一.新浪: 新浪网的新闻比较好爬取,我是用BeautifulSoup直接解析的,它并没有使用J ...

  6. 小爬虫。爬取网站多页的通知标题并存取在txt文档里。

    爬取网页中通知标题的内容展示: this is  1  page!<精算学综合>科目考试参考大纲2016年上半年研究生开题报告评议审核结果公示[答辩]2016下半年研究生论文答辩及学位评定 ...

  7. python爬取b站排行榜

    爬取b站排行榜并存到mysql中 目的 b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设.首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化. 网站的结构 目标网站:bil ...

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

    整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到 ...

  9. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

随机推荐

  1. HTML <select>标签

    1.简单的下拉列表 <html> <body> <form> 名: <select name="firstname"> <op ...

  2. DALI调色温

    DALI调色温模块使用手册 公  司: 深圳市万秀电子有限公司 网  站: http://www.wanxiucx.com 总  机: 0755-23215689 联系人: 张先生 手  机: 139 ...

  3. PostgreSQL 的 distinct on 的理解

    摘录自:http://www.cnblogs.com/gaojian/archive/2012/09/05/2671381.html 对于 select distinct on , 可以利用下面的例子 ...

  4. 20170505 PHP实践中知识点

    1.json_encode 不转义 2.empty() 与 isset() 区别 在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯 ...

  5. xen虚拟机(Centos6.6)的创建和扩容

    好久没来更博了,从这篇开始,我准备好好梳理一下Hadoop的那些"事".本人技术渣一枚,只是本着知识共享的原则,希望将我所掌握的知识分享出来.若文中有错误的地方,欢迎大家告知我,我 ...

  6. Django_xadmin_应用外键搜索功能错误

    问题: 当我在给某一张表加上外键搜索的时候,会出现 TypeError: Related Field got invalid lookup: icontains 问题原因: a 表关联 b表,也就是说 ...

  7. WebSphere--基本特性

    WebSphere应用服务器使您能够为Servlet 的开发实现 "一次写成,各处使用"的目的.该产品包括一个基于 Java 的 Servlet 引擎,独立于 Web 服务器和它所 ...

  8. Struts2 (三)

    1 Struts2的拦截器 Struts2拦截器在访问某个Action方法之前或之后实施拦截,拦截器是可插拔的,拦截器是AOP的一种实现. Struts2拦截器栈:将拦截器按一定顺序联结成一条链,在访 ...

  9. nodejs爬虫笔记(五)---利用nightmare模拟点击下一页

    目标 以腾讯滚动新闻为例,利用nightmare模拟点击下一页,爬取所有页面的信息.首先得感谢node社区godghdai的帮助,开始接触不太熟悉nightmare,感觉很高大上,自己写代码的时候问题 ...

  10. iOS-cocoapods安装与使用以及常见错误

    前言 CocoaPods是一个负责管理iOS项目中第三方开源代码的工具. 二.安装由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下:注:要使用CocoaPods,那就要下载 ...