小白入门分享第一个爬虫

import requests
from lxml import etree
import os
name = 0

def header(url):
    header = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
        'Referer': url
        }
    return header
#获取图片地址 
def get_img(url):
    global name
    name+=1
    img_name = '{}.jpg'.format(name)
    if os.path.isfile(img_name)!=True:
        img = requests.get(url,headers=header(url)).content
        with open(img_name,'wb') as save_img:
            save_img.write(img)
#获取网站地址
def get_url(url):  
    html = requests.get(url,headers=header(url)).text
    etree_html = etree.HTML(html)
    img_url = etree_html.xpath('//div[@class="main-image"]/p/a/img/@src')       
    return img_url
#获取主页图片集地址  
def get_mainpic_url(url):
    html = requests.get(url,headers=header(url)).text                       
    etree_html = etree.HTML(html)
    page_url = etree_html.xpath('//div[@class="pagenavi"]/a/@href')
    return page_url
#获取子页图片集地址  
def get_subset(url):
    html = requests.get(url,headers=header(url)).text                       
    etree_html = etree.HTML(html)
    page_url = etree_html.xpath('//div[@class="postlist"]/ul[@id="pins"]/li/a/@href')
    return page_url

def main():
    address = os.path.abspath('.')+"\\pic"
    number = 0
    x = 0
    #爬取数量
    maxnumber = int(input("你想爬取多少个图册:"))     
    while(1):
        if x==0:
            url = 'https://www.mzitu.com'
            x+=1
        else:
            url = 'https://www.mzitu.com//page//{}.format(x)'
        addrlist_main = get_subset(url)                           
        #首页的子页url
        n=0
        original_folder = address           
        for subaddr in addrlist_main:
            #创建存储文件夹 
            os.chdir(original_folder)                                  
            if n< maxnumber:
                n+=1
                os.chdir(original_folder)           
                pagelist_sub = get_mainpic_url(subaddr)   
                #子页里获取后面几页的url??
                for page in pagelist_sub:
                    if page!="/hot/":             
                        #获取子集中的主图片
                        img_list = get_url(page)                      
                        for img in img_list:
                            #下载图片
                            get_img(img)                                  

            else:
                exit()
main()
讨论数量: 5

排版,说明,代码高亮、缩进都没有。。。。。

4年前 评论

@Bgods 第一次参与这个论坛发帖,还不会这些操作。。。

4年前 评论
klsjnfkjdn 4年前

是不是打算面向监狱编程

4年前 评论
klsjnfkjdn 4年前
Coolest 4年前
s3035 4年前
klsjnfkjdn 4年前
Lele1357 4年前

你确定这是 小白,入门,第一个 爬虫??我怎么感觉很厉害~

4年前 评论
Python_xiaohe (楼主) 3年前
Lele1357 (作者) 3年前

我个人觉得使用request比较危险,毕竟它所使用的网路流量非常大,而且流量大的情况下很容易被目标网站认定为DDoS攻击,所以我觉得改用Selunium和web driver会更好的 如果你坚持要使用request也可以,不过我建议你中间加插中途休息的指令,例如 time.sleep(5) ,这样我觉得会更好

3年前 评论
Python_xiaohe (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!