基础简单爬虫_1


# =============================================================================
# url基础爬取网页并保存为html文件
# =============================================================================
import urllib.request

#方法一:
file=urllib.request.urlopen('https://hao.360.com/?wd_xp1')
data=file.read()
fhandle=open(r'D:\桌面\代码\爬虫项目\1.html','wb')
fhandle.write(data)
fhandle.close()

#方法二:
filename=urllib.request.urlretrieve('https://hao.360.com/?wd_xp1',filename=r'D:\桌面\代码\爬虫项目\1.html')
urllib.request.urlcleanup()  #清除urlretrieve产生的缓存

#python读取本地文件内容
fhandle=open(r'D:\桌面\代码\爬虫项目\1.html','rb')
fhandle.read()

#关于网页的一些操作
file=urllib.request.urlopen('https://hao.360.com/?wd_xp1')
file.info()  #返回与当前环境有关的信息
file.getcode()  #获取网页状态码,200表示正确
file.geturl()  #获取网页url地址

urllib.request.quote('http://www.jbd年底.com.cn')  #url不符合标准字符,要进行编码
#运行结果:
#   http%3A//www.jbd%E5%B9%B4%E5%BA%95.com.cn
urllib.request.unquote('http%3A//www.jbd%E5%B9%B4%E5%BA%95.com.cn')  #解码
#运行结果:
#   http://www.jbd年底.com.cn


# =============================================================================
# 浏览器模拟
# =============================================================================
#一些反爬导致爬虫失败,可以设置一些Hearders信息,模拟成浏览器去访问网站
import urllib.request
url='https://blog.csdn.net/weiwei_pig/article/details/51178226'
user_agent="   "   #获取方式见下图
headers=('User-Agent',user_agent)

#方法一:
#修改报头
urllib.request.build_opener().addheaders=[headers]
data=urllib.request.build_opener().open(url).read()

#方法二
#添加报头
req=urllib.request.Request(url)
req.add_header('User-Agent',user_agent)
data=urllib.request.urlopen(req).read()

                    

 


# =============================================================================
# 访问网页超时设置
# =============================================================================

#写在前面:try的用例
for i in range(10):
    try:
        if i<5:
            print(i)
        else:
            a=1/0
    except Exception as e:
        print('i=',i,'出现异常-->'+str(e)+'\n')
        
#进入正题
#超时设置使用参数,timeout,设置为:1秒
import urllib.request as urlrq
for i in range(10):
    try:
        url_1='http://yum.iqianyue.com'
        url_2='http://yum.iqianyue.com0000'
        url_3='http://my.gdufe.edu.cn/' #学校网址有时候不行,所以拿来做实验,O(∩_∩)O哈哈~
        if i%3==0:
            file=urlrq.urlopen(url_1,timeout=1)  #url_1为正确网址,访问正常
        elif i%3==1:
            file=urlrq.urlopen(url_2,timeout=1)  #url_2为错误网址,运行异常
        else:
            file=urlrq.urlopen(url_3,timeout=1)  #url_3为超时网址,访问超时,还真不行,O(∩_∩)O哈哈~
        data=file.read()
        print(len(data))
    except Exception as e:
        print('there is some exception where run in No.'+str(i)+' times:'+str(e))


# =============================================================================
# HTTP协议请求
# GET请求,网址格式:http://www.baidu.com/s?wd=关键词
# =============================================================================
import urllib.request 

keywd='php'
url="http://www.baidu.com/s?wd="+keywd
req=urllib.request.Request(url)
data_1=urllib.request.urlopen(req).read()
print(len(data_1))

#好奇的我不知道为什么书上要用req而不直接用url呢?
#所以产生了下面的代码
data_2=urllib.request.urlopen(url).read()
print(len((data_2)))
print(len(data_1)-len(data_2))

#上面的两个方法read()出来的长度不同
#所以产生下面代码,看看在网页上有没有不一样的
fhandle=open(r'D:\桌面\代码\爬虫项目\1.html','wb')
fhandle.write(data_1)
fhandle.close()

fhandle=open(r'D:\桌面\代码\爬虫项目\2.html','wb')
fhandle.write(data_2)
fhandle.close()

#用浏览器打开两个html文件后,肉眼没发现啥不同
#所以看一下文本内容吧
data_a1=data_1.decode('utf-8')
data_a2=data_2.decode('utf-8')
n=min(len(data_a1),len(data_a2))
for i in range(n):
    if  data_a1[i]!=data_a2[i]:
        print(i)
        break

#返回128548
i=30
print(data_a1[128548-i:128548+i])
print(data_a2[128548-i:128548+i])

print(data_a1[128548-i:128548+i*5])
print(data_a2[128548-i:128548+i*5])
#把两个文件用txt打开,然后在TXT里分别查找上面输出的片段
#找到一个是<noscript>标签里的不一样
#好了结束不找了,有点太跑题


#如果keywd是中文,要先编码
keywd='大家'
keywd=urllib.request.quote(keywd)
url="http://www.baidu.com/s?wd="+keywd
#要把keywd编码再合并网址
#不能先合并再编码url,否则网址格式不是:http://www.baidu.com/s?wd=关键词
#则无法进行GET请求


# =============================================================================
# HTTP协议请求
# POST请求,进行注册、登录等操作
# =============================================================================
#POST表单传递信息
import urllib.request
import urllib.parse
url='https://iqianyue.com/mypost/'
#查看页面源代码,找到form表单部分,具体操作如下图
login={"name":'ceo@iqianyue.com',
       "pass":'aA123456'}
postdata=urllib.parse.urlencode(login).encode('ascii')
req=urllib.request.Request(url,postdata)
req.add_header('User_Agent',user_agent)
data=urllib.request.urlopen(req).read()

#插入一个比较个性的输出函数format()
filename=r'D:\桌面\代码\爬虫项目\{}.html'
print(filename.format(3))
#输出结果:D:\桌面\代码\爬虫项目\3.html
#amazing O(∩_∩)O~

file=open(filename.format(3),'wb')
file.write(data)
file.close()


#if写入的数据是bytes类型不是str,则open()要传入参数:'wb'
#查看data格式:type(data)
#结果data是bytes类型
#打开的文件路径地址前都有'r',作用是对路径地址中的'\'进行转义,所以可以直接把文件路径复制粘贴

#以下是三种打开文件的方式,对比之下第一种最方便
file=open(r'D:\桌面\代码\爬虫项目\4.html','wb')  #直接复制粘贴就是'\',再在路径字符串前加上‘r'
file=open('D:\\桌面\\代码\\爬虫项目\\4.html','wb')  #要手动吧符号改成'//'
file=open('D:/桌面/代码/爬虫项目/4.html','wb')  #要手动吧符号改成'/'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值