煎蛋网爬虫之JS逆向解析img路径

图片使用js onload事件加载

<p><img src="//img.jandan.net/img/blank.gif" /><span class="img-hash">Ly93eDEuc2luYWltZy5jbi9tdzYwMC8wMDd1ejNLN2x5MWZ6NmVub3ExdHhqMzB1MDB1MGFkMC5qcGc=</span></p>

找到soureces 文件中对应的js 方法jandan_load_img

通过debugger  js  将Ly93eDEuc2luYWltZy5jbi9tdzYwMC8wMDd1ejNLN2x5MWZ6NmVub3ExdHhqMzB1MDB1MGFkMC5qcGc= 传入函数jdugRtgCtw78dflFjGXBvN6TBHAoKvZ7xu base64_decode得到img路经

再通过正则表达式将img路径中的(/W+)替换为large

爬取代码如下:

import base64
import re
import requests
from concurrent.futures import ThreadPoolExecutor
from random import choice
from lxml import etree
from user_agent_list import USER_AGENTS
headers = {‘user-agent‘: choice(USER_AGENTS)}

def fetch_url(url):
    ‘‘‘
    :param url: 路径
    :return: html
    ‘‘‘
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        if r.status_code in [200, 201]:
            return r.text
    except Exception as e:
        print(e)

def downloadone(url):
    html = fetch_url(url)
    data = etree.HTML(html)
    img_hash_list = data.xpath(‘//*[@class="img-hash"]/text()‘)
    for img_hash in img_hash_list:
        img_path = ‘http:‘ + bytes.decode(base64.b64decode(img_hash))
        img_path = re.sub(r‘mw\d+‘, ‘large‘, img_path)
        img_name = img_path.rsplit(‘/‘, 1)[1]
        with open(‘jiandan/‘+img_name, ‘wb‘) as f:
            r = requests.get(img_path)
            f.write(r.content)

def main():
    url_list = []
    for _ in range(1, 44):
        url = ‘http://jandan.net/ooxx/page-{}‘.format(_)
        url_list.append(url)
    with ThreadPoolExecutor(4) as executor:
       executor.map(downloadone, url_list)

if __name__ == ‘__main__‘:
    main()

  

原文地址:https://www.cnblogs.com/frank-shen/p/10269363.html

时间: 2024-10-19 13:55:33

煎蛋网爬虫之JS逆向解析img路径的相关文章

Python爬虫之爬取煎蛋网妹子图

这篇文章通过简单的Python爬虫(未使用框架,仅供娱乐)获取并下载煎蛋网妹子图指定页面或全部图片,并将图片下载到磁盘. 首先导入模块:urllib.request.re.os import urllib.request import re import os urllib.request模块用于获取HTML页面数据 re模块用于通过正则表达式解析并截取HTML页面图片url os模块用于文件夹相关操作 代码不多,直接贴出来,代码解释在注释中: def crawl_jiandan(page, p

python3煎蛋网的爬虫

做的第一个爬虫就遇上了硬茬儿,可能是我http头没改好还是我点击次数过高导致无法循环爬取煎蛋网的妹子图.... 不过也算是邪恶了一把...技术本无罪~~~ 爬了几页的照片下来还是很赏心悦目的~ import urllib.request import re import time import requests k=1 def read_url(url,k): user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36

爬虫实例——爬取煎蛋网OOXX频道(反反爬虫——伪装成浏览器)

煎蛋网在反爬虫方面做了不少工作,无法通过正常的方式爬取,比如用下面这段代码爬取无法得到我们想要的源代码. import requests url = 'http://jandan.net/ooxx' print requests.get(url).text 执行上述代码,你得到的结果应该跟我一样: 煎蛋网应该是通过检测headers来判断是否爬虫,要想获取正常的源代码,需要伪装成浏览器. # -*- coding: utf-8 -*- import re import requests from

python3爬虫爬取煎蛋网妹纸图片

其实之前实现过这个功能,是使用selenium模拟浏览器页面点击来完成的,但是效率实际上相对来说较低.本次以解密参数来完成爬取的过程. 首先打开煎蛋网http://jandan.net/ooxx,查看网页源代码.我们搜索其中一张图片的编号,比如3869006,看下在源代码中是否能找到图片链接 从上面的HTML结构中找到这个标号对应的一些属性,没有直接的图片链接地址,只有一个src=//img.jandan.net/blank.gif,这很明显不是个真实的链接地址,因为每一个图片编号都有这个值.我

爬虫之煎蛋网妹子图 大爬哦

今天为了测试一下urllib2模块中的headers部分,也就是模拟客户端登陆的那个东东,就对煎蛋网妹子图练了一下手,感觉还可以吧.分享一下! 代码如下 # coding:UTF-8 import urllib2,urllib,re,random def getHtml(url) : request = urllib2.Request(url,headers=headers) response = urllib2.urlopen(request) page = response.read() r

用python来抓取“煎蛋网”上面的美女图片,尺度很大哦!哈哈

废话不多说,先上代码: import urllib.request import re #获得当前页面的页数page_name def get_pagenum(url): req = urllib.request.Request(url) req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safar

selenium爬取煎蛋网

selenium爬取煎蛋网 直接上代码 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as ES import requests import urllib.requ

python 爬虫爬取煎蛋网妹子图

首先查看js渲染前的html源码,发现放图片的位置是这样的 本该放地址的地方赫然放着blank.gif,并且在onload属性上绑定了一个jandan_load_img函数.这个jandan_load_img就成为本次爬虫的突破所在了.继续ctrl+shift+F全局搜索,找到这个函数 流程图: import hashlib import base64 from bs4 import BeautifulSoup import requests import re import random im

python 爬取煎蛋网图片

__author__ = mkdir(path):     os     path = path.strip()  path = path.rstrip()  mkfile = os.path.exists(path)     mkfile:         ()     :         os.makedirs(path)         () urllib, urllib2, re geturl(url):     file_lists = []     req = urllib2.Req