吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15558|回复: 38
收起左侧

[Python 转载] 换个框架爬妹子图mzitu解决直接访问的403

[复制链接]
mychi 发表于 2019-6-11 18:48
本帖最后由 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写的有点麻烦!


代码上缴




访问错误

访问错误

mzitu-403

mzitu-403
example.png

Resques.7z

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

代码

免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
phdsx + 1 我很赞同!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
安然失笑 + 1 + 1 下载下来是代码呀 怎么用?
hc7200 + 1 + 1 用心讨论,共获提升!
a312714497 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| mychi 发表于 2019-6-24 10:25
derain 发表于 2019-6-22 11:18
把下载好的图 交出来就可以了

好吧!  
链接: https://pan.baidu.com/s/1Nbrgex7r-kincOm8keNhYA 提取码: rv06
部分的
MyLove 发表于 2019-6-11 20:17
所有请求带header,图片地址的访问带referer
[Python] 纯文本查看 复制代码
  headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0",
        "Request": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Referer": referer
    }
 楼主| mychi 发表于 2019-11-4 11:01

写这个 风险挺大的  领导在我身边过去  以为我上班 在看小图片呢  给你写了一个大概 你自己看看吧,原理都是一样的  剩下的也是需要用我写这里的 方法继续往下解析
[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 -*-
'''
@Author : mrchi
@Time   : 2019/11/4 10:26
@Project: mzitu
@Website: https://www.mrchi.cn
@File   : mzsock.py
@Desc   :
'''

import random
import time
import requests
from bs4 import BeautifulSoup
import re
import os
#todo Python3 解除警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36",
    "Referer": "http://mzsock.com/mv/"
}
class crawler(object):

    def __init__(self,target_url):
        self.url = target_url
        self.request_target(self.url)
        pass
    # 请求目标地址
    def request_target(self,url):
        # Session 模式访问 访问时携带 Session 信息
        get_target = requests.Session()
        # 健壮性判断
        try:
            if get_target.get(url ,headers=headers,verify=False).status_code is 200:
                context = get_target.get(url).text
                self.parser(context)
        except:
            print( "请求失败 emmmm~")
        pass
    # 处理每一个链接
    def processing_every_link(self):
        pass

    # 处理每一个子连接
    def target_child_page(self):
        pass

    # 图片地址
    def image_address(self):
        pass

    # 解析网页
    def parser(self,response):
        soup = BeautifulSoup(response, 'lxml')
        #  select  是选择 这个 标签
        for child_link in soup.select('#post-list > li> div.post-thumbnail'):
            bs = BeautifulSoup(str(child_link), 'lxml')
            # find_all 是查找所有的 a  标签的 内容
            cycle_a = bs.find_all('a')
            # 查找 span 标签的 页面显示内容 也就是 页面数量
            img_num = bs.find('span').get_text()
            print(img_num)

            for item in cycle_a:
                print(item.get("href"))
                print(item.get("title"))


if __name__ == '__main__':
    url = "http://mzsock.com/mv/"
    crawler(url)

头像被屏蔽
大象无形 发表于 2019-6-11 19:03
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| mychi 发表于 2019-6-11 19:14
大象无形 发表于 2019-6-11 19:03
业余时间玩玩还是可以的

嗯哪,还有待优化的!走过路过给点分啊!
a312714497 发表于 2019-6-11 19:20
支持一下大佬。。
Small_Google 发表于 2019-6-11 19:26
你有没有想过。可能真的是他的网站问题?
YuLoo 发表于 2019-6-11 20:14
下载下来玩玩,测试下
枪扫珍珠港 发表于 2019-6-11 20:55
老铁啊,最近在入门爬虫,能不能指条明路或者交流交流什么的,带带路
xiaozhi01 发表于 2019-6-11 21:25
收藏了,学习学习
zbr878458173 发表于 2019-6-11 21:33
不会python 只能看着,。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 12:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表