一直爬虫的自我修养~~~!!!

*Python如何访问互联网

  使用python的内置电池【url+lib=urllib】》》他是一个包

使用urlopen访问网页

 

 实战一,从网站上下载一张猫的图片‘

这俩个实际是一样的,正常话传字符串会简单,但是对于好多爬虫我们需要修改head等等,只能使用Request了,string办不到

 

 

对于response我们还可以用

*geturl()

  访问的链接地址

*info()

  http远程对象..

*getcode()

  访问状态

实战二,通过python获取有道网址,在python上进行翻译

   在【审查元素】的network下找我发起请求,在那里获取网站工作的地址等信息

#过程就是访问链接,包装文本,改变用户代理,开始访问,回应解析,调用j变成可解析,输出

 隐藏/看起来更像浏览器访问

  

  1)修改User-Agent #在request生成之前加入,直接在Request加

  

   2)修改User-Agent #在request生成之后加入Request下的add_header,个人觉得写这个!!

  

   正常人浏览网页不可能像爬虫一样一秒钟上百个下载等等,目前解决方案,俩种,1.延迟提交2.代理!!!

   1.延迟提交

   

  2代理!!!

  原理就是我每次访问随即使用一个非我自己的ip,让那个IP访问将结果给我

  

 

import urllib.request
import random

#url='http://www.whatismyip.com.tw'
url='http://ip.tool.chinaz.com/'
#url="http://www.baidu.com"

#https://www.kuaidaili.com/free/inha/这个网站下有好多代理ip
#下面是代理的流程,首先随机ip,然后创建opener并改变用户代理,最后安装这个代理,安装好了之后我们使用urllib.request就会以代理的ip来访问
iplist=["163.204.241.233:9999",'182.34.34.181:9999','163.204.245.246:9999'"222.135.28.235:8060"]
proxuy_support=urllib.request.ProxyHandler({"HTTP":random.choice(iplist)})#HTTP需要大写,小写连接不上 我擦...
opener=urllib.request.build_opener(proxuy_support)
opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36")]
urllib.request.install_opener(opener)
                                       
response=urllib.request.urlopen(url)
html=response.read()
print(html)

爬图片,这里引用的是和小甲鱼视频一样的网站,可能内容有点劲爆,下面代码,可用~!!

 

import urllib.request
import os

def url_open(url):
    rq=urllib.request.Request(url)
    rq.add_header=("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36")
    response=urllib.request.urlopen(rq)
    html=response.read()#在这不写解码是因为下面保存图片的时候,图片是二进制,如果转成utf-8则解析不了
    return html

#获取当前网页图片是第几页
def get_page(url):
    html=url_open(url).decode("utf-8")

    a=html.find('current-comment-page')+23#23是网页从current-comment-page的c开始数,到我当前的页数的偏移
    b=html.find(']',a) #从a开始找后面第一个]
    return html[a:b] #分片,截取出来的就是当前页数

#获取当前页面全部的图片,返回列表
def find_imgs(url):
    html=url_open(url).decode("utf-8")#解析成html页面
    img_addrs=[]#该页所有图片的地址
    
    a=html.find("img src=")
    while a!=-1:#如果没到达最后图片
        b=html.find(".jpg",a,a+255)#加4到达jpg后,这里还没学正则,因此a+255,一般一行最多也不会超过255,如果不是jpg他就会找下面去了,所以写a+255徐Ian定范围
        if b!=-1:
            img_addrs.append(html[a+9:b+4])
        else:
            b=a+9#如果不写一旦b找不到下面a一直循环在同一个位置
            
        a=html.find("img src=",b)#寻找下一个
    return img_addrs
    
#把列表中所有的图片保存到指定文件夹
def save(folder,img_addrs):
    for each in img_addrs:
        filename=each.split('/')[-1]#可以写负数唉,取出切分后最后一个 如:http://www.jksjadp/58s475.jpg 取出的是58s475.jpg
        with open(filename,'wb') as f:
            #少了http:无法访问
            each='http:'+each
            img=url_open(each)
            f.write(img)

def download_mm(folder="G:\\PY\\OOXX",page=10):
    os.mkdir(folder)#创建文件夹
    os.chdir(folder)#设置起始目录为当前的目录,save的时候就不用写绝对路径了

    url="http://jandan.net/ooxx"
    page_num=int(get_page(url))

    for i in range(page):
        page_url=url+'/page-'+str(page_num)+'#comments'
        img_addrs=find_imgs(page_url)
        save(folder,img_addrs)
        page_num-=1#每次-1页

if __name__=='__main__': #如果当下运行则会执行,否则比如模块引入则不会执行
    download_mm()

 使用代理,下载的不仅仅是我们本网站这些图片,原因是什么,等下再说哦~~~

 

posted @ 2019-06-02 11:31  程序杰杰  阅读(257)  评论(0编辑  收藏  举报