Python:小甲鱼第一天到某视频语法速成

记录了作者开始学习Python的第一天,从基础的BIF、内置函数和缩进开始,通过小甲鱼的教程进行学习。之后转向速成教程,并在7月24日完成了基础语法的学习,开始接触函数。注意到目前学习的可能是过时的技术,对于含js的网页抓取无能为力。
摘要由CSDN通过智能技术生成

2019.7.12:学习py的第一天

 

来自小甲鱼的基础,很好但是太慢了,后面找了个速成的

BIF:内置函数

help(type):帮助函数

 print("")输出字符串

缩进在py中占有很重的地位

alt+n/p:回到上一句下一句 

2019.7.24

语法速成:

本来是拍下来的笔记,上传太麻烦了。

 

基础语法完结,下面是函数,还有各种东西,就不拍了,都记到本子上了

 

代码笔记

#豆瓣出版社的名字爬取
import re
import urllib.request
#https://read.douban.com/provider/all
data=urllib.request.urlopen("https://read.douban.com/provider/all").read().decode("utf-8")
pat='<div class="name">(.*?)</div>'
res=re.compile(pat).findall(data)
fh=open("C:\\Users\\2280xdyn\\Desktop\\爬虫.txt","w")
for i in range(0,100):
    fh.write(res[i]+"\n")
fh.close()
    
#超时检测,设置,以及异常处理复习
import urllib.request
for i in range(0,100):
    try:
        file=urllib.request.urlopen("http://www.baidu.com",timeout=0.3)
        print(len(file.read().decode("utf-8")))
    except Exception as err:
        print("出现超时"+str(err))
#get请求实战,其实就是直接百度框子搜索
import re
import urllib.request

keywd="百度百科"
#浏览器可以自动转码,汉字需要转码
keywd=urllib.request.quote(keywd)
#貌似只可以英文,因为提示ascll码超出什么的
#加入页码的构造
for i in range(1,10):
    #通过网页查看
    page=(i-1)*10
    url="http://www.baidu.com/s?wd="+keywd+"&pn="+str(page)
    data=urllib.request.urlopen(url).read().decode("utf-8")
    pat='"title":(.*?)",'
    res=re.compile(pat).findall(data)
    for i in range(0,len(res)):
        print(res[i],end="\n")

#这个和上面是分开的,爬的某吧的标题
import re
import urllib.request

url="https://www.zhuanyes.com/xianbao/?page="
for i in range(1,10):
    data=urllib.request.urlopen(url+str(i-1)).read().decode("utf-8")
    pat='<a style="" href="https://www.zhuanyes.com/xianbao/[0-9]{6}.html" target="_blank">(.*?)</a>'
    res=re.compile(pat).findall(data)
    print("\n\n")
    for j in range(0,len(res)):
        print(res[j])

#post请求实战
import re
import urllib.request

#转码才能传过去
import urllib.parse

#这个网站已经废了,但是我有没有找到合适的,所以这一段代码是错误的
#posturl="http://www.iqianyue.commypost/"
posturl="http://www.baidu.com"
postdata=urllib.parse.urlencode({
    #字典
    "name":"sasdsda",
    "pass":"asdasd",
    }).encode("utf-8")
#进行post就必须用urllib.request下面的Reque(真实post地址,post数据)
#对req进行封装
req=urllib.request.Request(posturl,postdata)
datares=urllib.request.urlopen(req).read().decode("utf-8")

#写入到本地
fh=open("C:\\Users\\2280xdyn\\Desktop\\爬虫.html","w")
#这里没有用循环,直接一步写入
fh.write(datares)
fh.close()
#异常处理
'''
URLError出现的原因:
1. 连接不上服务器
2. 远程url不存在
3. 无网络
4. 触发HTTPError
'''
import urllib.error
import urllib.request
#这个样例得目的是403错误,但是一直不报错就很蒙蔽
try:
    urllib.request.urlopen("http://blog.csdn.net")
except urllib.error.URLError as e:
    if hasattr(e,"code"):
        print(e.code)
    if hasattr(e,"reason"):
        print(e.reason)


#对浏览器伪装
import urllib.request
url="http://blog.csdn.net"
print("1")
#头文件header格式    header=("Uesr-Agent",用户代理值)
#添加用户代理
headers=("Uesr-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")
#这里是一个对象
opener=urllib.request.build_opener()
opener.addheaders=[headers]
data=opener.open(url).read()
fh=open("C:\\Users\\2280xdyn\\Desktop\\ppp.html","wb")
fh.write(data)
fh.close()
#爬去腾讯新闻的所有新闻内容到本地

import re
import urllib.request

#腾讯新闻的主页网址
#https://new.qq.com/omn/NEW20190/NEW2019073000268200.html    测试样例
#url="https://new.qq.com/omn/NEW20190/NEW2019073000268200.html"
#这里的ignore是避免编码错误,继续执行
#data=urllib.request.urlopen(url).read().decode("GBK","ignore")
'''
1. 爬取首页
2. 得到各个新闻链接
3. 爬取新闻链接
4. 寻找是否有frame
5. 如果有frame,抓取网页内容
6. 如果没有,直接抓取当前页面
'''

url="https://news.sina.com.cn/"

pat='<a href="(.*?)" target="_blank">'
data=urllib.request.urlopen(url).read().decode("GB2312","ignore")
alllink=re.compile(pat).findall(data)
fh=open("C:\\Users\\2280xdyn\\Desktop\\111.TXT","w")
for i in range(0,len(alllink)):
    #加了个异常处理,但是实际啥都没处理,爬了60+个之后暴毙
    try:
        thislink=alllink[i]
        thispage=urllib.request.urlopen(thislink).read().decode("GB2312","ignore")
        pat1="<frame src=(.*?)>"
        #这里开始就蒙蔽了,前端没学好不记得啥事frame了,大概看了一下,本质还是一个正则的结果
        isframe=re.compile(pat1).findall(thispage)
        if(len(isframe)==0):
            print(str(i))
            #下面函数的介绍https://blog.csdn.net/pursuit_zhangyu/article/details/80556275
            urllib.request.urlretrieve(thislink,"C:\\Users\\2280xdyn\\Desktop\\新建文件夹 (2)\\"+"新浪"+str(i)+".html")
        else:
            flink=isfarme[0]
            urllib.request.urlretrieve(flink,"C:\\Users\\2280xdyn\\Desktop\\新建文件夹 (2)\\"+"新浪"+str(i)+".html")
    except urllib.request.URLError as e:
            pass
import re
import urllib.request

url="https://www.csdn.net/"
'''
视频说需要浏览器伪装,但是实际好像不用也可以,设置头
#("User-Agent","***")
headers=opener=urllib.request.build_opener
opener.addheaders=[headers]
urllib.request.install_opener(opener)
'''

data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='<a href="(.*?)" target="_blank".*?>'
#到这一步已经爬取到了目标连接,但是检测了一下,有很多重复的
alllink=re.compile(pat).findall(data)

for i in range(0,15):
    print(alllink[i]+"\n")

#下面是判断爬取到的链接能否继续爬去,以此判断是否可以下载

for i in range(0,len(alllink)):
    try:
        #取出当前页面的链接
        thispage=alllink[i]        
        pat2="<frame src=(.*?)>"
        isfarme=re.compile(pat2).findall(thispage)
        if(len(isfarme)==0):
            #说明没有下一步链接,可以直接下载
            #fh=open("C:\\Desktop\\新建文件夹(2)\\"+"CSDN"+str(i)+".html")
             urllib.request.urlretrieve(alllink[i],"C:\\Users\\2280xdyn\\Desktop\\新建文件夹 (2)\\"+"CSDN"+str(i)+".html")
        else:
            #说明不能直接下载,需要进一步爬取
            #
            urllib.request.urlretrieve(isframe[0],"C:\\Users\\2280xdyn\\Desktop\\新建文件夹 (2)\\"+"CSSDN"+str(i)+".html")
    #这里的异常处理也需要注意,不同的错误类型不一样
    except urllib.request.URLError as e:
            pass

            
import urllib.request


#下面的几行都挺陌生的,不熟悉
ip="182.34.26.27"
#用到的字典,然后下面的函数实现代理格式的转化
#poxyhandler的详解:https://blog.csdn.net/qq_32252917/article/details/79074219
proxy=urllib.request.ProxyHandler({"http":ip})
#构建一个对象,添加过信息头的
#https://blog.csdn.net/qq_38875300/article/details/80115536  build的讲解
opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)

url="http://www.baidu.com"
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

print(len(data))
#糗事百科不是关键,主要是代理IP池子
#https://www.qiushibaike.com/
#https://www.qiushibaike.com/8hr/page/2/

#找到控制页码的字段
#https://www.qiushibaike.com/article/121186480
#找到文章的字段

import re
import urllib.request

headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
#安装为全局
urllib.request.install_opener(opener)

for j in range(2,10):
    try:
        url="https://www.qiushibaike.com/text/page/"+str(j)+"/"
        pat='<div class="content">.*?<span>(.*?)</span>.*?</div>'

        #远程关闭连接错误,需要报头
        #这里还有一个错误,编码错误,但是编码错误已经忽略了呀,异常处理这里也米有跳过,不理解
        data=urllib.request.urlopen(url).read().decode("UTF-8","ignore")
        alltext=re.compile(pat,re.S).findall(data)
        for i in range(0,len(alltext)):
            print(alltext[i])
            print("------------------------------------------------------")
    except urllib.request.URLError as e:
        pass

    

弱弱的说一句,我们到目前为止都爬到的是静态网页,含有js的爬不到,就很难受。

而且现在学的貌似都是几年前的视频了,技术早就更新了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值