首页 编程教程正文

换个框架爬妹子图mzitu解决直接访问的403

piaodoo 编程教程 2020-02-22 22:09:10 1089 0 python教程

本文来源吾爱破解论坛

本帖最后由 mychi 于 2019-6-11 19:03 编辑

前言:
开始我用Requests写的有问题.
现在不能直接访问.我也不知道啥原因,但是百度快照的你可以连接进去
我就是这样搞的 好像是重定向可以  直接连接直接返回403
我之前搞过selenium,就整下试试.反正 你想要直接请求我看都GG
主页单页面数是27个 算上广告,选择css选择器能看到最后一个child
详情页面数,根据给的标题 正则能出来
用到的东西


工具:
       Python3.7 PyCharm
     
框架:
        pyautogui selenium   pyautogui
      
集成的有:
  re random time  os
  

多写也就是5个方法!


search_context()                一层小的包装
each_page()                        具体干活的方法
first_windows()                切换到第一个窗口(主页)
page_number()                获取详情页面具体的页数
switch_to_new_window()        切换到最新的窗口(详情页面)




先上一个很丑的画面,直接访问403,开始以为是我IP的问题,换了代{过}{滤}理还是这样的
度娘一下.还有这个的快照.我这就是简单些一个思路.大佬见了别喷我! 我对这个也不是太专业!

中间遇到的问题:
       1.不能直接访问他的图片地址.也不能直接获取他的单页面(相册的总数),用了一个取巧的方法,获取标题饭后正则匹配一下 将数字匹配出来.也算是一个动态吧,不过是需要从后面往前下载保存!
       2.os创建文件夹的时候正常应该是一个图集名字一个文件夹的,但是用pyautogui能写英文的,写不了中文的,卡住我一会
       3.保存的时候需要用pyautogui配合使用,但是typewriter写的时候总把路径和后面的逻辑给写乱了!改为keyUp/keyDown


这里就是学习的 我也没有弄啥多线程.不仅没用多线程.就连我有时候的请求我都sleep一会!别搞搞在给我这两个IP 弄封了!


引用的代码
[Python] 纯文本查看 复制代码

import pyautogui
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
import time
import random
import os


写在前面的:
[Python] 纯文本查看 复制代码
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
target_url = "https://www.baidu.com/link?url=_zz8LxCfmwSav6kwxmvN_qsEjLtwA518y6jf3QaqdEPqTcp7kkn8C3huH57VAnAj&wd=&eqid=a63b61400011062a000000025cff060f"



search_context()        
[Python] 纯文本查看 复制代码
    try:
        # todo Request target
        browser.get(target_url)
        print(browser.title)

        # todo processing each page
        each_page()

    except TimeoutException:
        # return search_context()
        return print("resquest error")



each_page()                具体干活的方法
[Python] 纯文本查看 复制代码
#processing each page
    for i in range(1, 28):
        #child page
        css = ("#pins > li:nth-child(%s) > a" % str(i))
        try:
            target_label = wait.until(
                EC.presence_of_element_located(
                    (By.CSS_SELECTOR, css)))
        except Exception:
            print("error occurred It could be advertising")
            continue
        # in to  child page
        target_label.click()
        # into  new windows
        switch_to_new_window()
        #last page number
        last_page = wait.until(
            EC.presence_of_element_located(
                (By.CSS_SELECTOR, 'body > div.main > div.content > div.pagenavi > a:nth-child(7)')))
        # todo click last pages
        last_page.click()
        # re match get page number
        page_total_number = page_number()
        # into  new windows
        switch_to_new_window()
       #save path
        root = "d:\\com.mzitu\\imgae" + str(i) + "\\"
        if os.makedirs(root):
            print(root + "File Dir Created Finish!")
        else:
            print("File Dir Exist!!")
        #detail page processing
        for x in range(page_total_number):
            click_each_detail_page = wait.until(
                EC.presence_of_element_located(
                    (By.CSS_SELECTOR, 'body > div.main > div.content > div.pagenavi > a:nth-child(1) > span')))
            click_each_detail_page.click()
            time.sleep(random.randint(0, 2))
            # todo  right click on the image
            jpg = wait.until(EC.element_to_be_clickable((By.TAG_NAME, 'img')))
            actions = ActionChains(browser)
            actions.context_click(jpg)
            actions.perform()
            # #todo input v  saved
            pyautogui.keyDown("v")
            time.sleep(1)
            pyautogui.typewrite(root + str(x))
            pyautogui.keyDown("enter")
            pyautogui.keyUp("enter")
            print("Is downloading...." + browser.title)
            time.sleep(0.5)
            pyautogui.keyDown("enter")
        first_windows()


first_windows()                切换到第一个窗口
[Python] 纯文本查看 复制代码
windows = browser.window_handles
browser.switch_to.window(windows[0])


page_number()                        获取详情页面具体的页数
[Python] 纯文本查看 复制代码
 return int(re.search('(\d+)', browser.title).group(1))


switch_to_new_window()        切换到最新的窗口(详情页面)
[Python] 纯文本查看 复制代码
    windows = browser.window_handles
    browser.switch_to.window(windows[-1])
    time.sleep(random.randint(0, 3))



马上下班啦!交稿.上班闲暇时间玩玩还是不错的!还有个小Bug 就是每个图集都少一个图,因为直接是从len(图集)-1 开始的自己改下就可以啦!还要那个广告位我也没咋出来!总的来说就是不用requests写的有点麻烦!


代码上缴




image.png (289.98 KB, 下载次数: 3)

下载附件  保存到相册

访问错误

2019-6-11 18:30 上传


mzitu.png (82.09 KB, 下载次数: 4)

下载附件  保存到相册

2019-6-11 18:04 上传

mzitu-403

mzitu-403

example.png (140.99 KB, 下载次数: 3)

下载附件  保存到相册

2019-6-11 18:47 上传

example.png
嗨学网

Resques.7z

2019-6-11 18:42 上传

点击文件名下载附件

下载积分: 吾爱币 -1 CB

1.59 KB, 下载次数: 102, 下载积分: 吾爱币 -1 CB

代码

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7708.html

搜索