吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2346|回复: 5
收起左侧

[Python 转载] 爬取 材料力学1第六版刘鸿文-指导与例题习题解答

  [复制链接]
mlyde 发表于 2021-3-31 13:06
本帖最后由 mlyde 于 2021-4-3 15:52 编辑


下载 书《材料力学1 第六版刘鸿文-指导与例题习题解答》的全部图片
下载的图片保存在“./cailiaolixue”里,全部为300张图片;我没有重命名图片,图片按时间排序就大概是正确顺序了(图片中也有页码)。若想按页码命名,可以添加一个全局变量page,每次调用 img_download 就让page加一,添加到文件名上。

通过post方式获取图片链接时,data中要有正确的时间戳才能获取到含有图片链接的json。

若遇到不能下载图片的情况(会输出 'Image download Error!' ),可能是Cookie过期(我也不清楚Cookie的有效期是多少),打开那个网页,找到 Cookie 替换一下就好。

完整代码:

[Python] 纯文本查看 复制代码
# 爬取的网页: https://max.book118.com/html/2019/0628/8026130071002032.shtm
import requests
import time
import re
import os

# 修改此处的cookie
cookie = '__yjs_duid=1_773b9a1b3c7d6735375c5941b9f5f1331617165401049; CLIENT_SYS_UN_ID=3rvgCmBj/FkLjk48Bc44Ag==; s_v=cdh%3D%3E27a30245%7C%7C%7Cvid%3D%3E1617165403565050051%7C%7C%7Cfsts%3D%3E1617165403%7C%7C%7Cdsfs%3D%3E0%7C%7C%7Cnps%3D%3E1; s_rfd=cdh%3D%3E27a30245%7C%7C%7Ctrd%3D%3Emax.book118.com%7C%7C%7Cftrd%3D%3Ebook118.com; s_s=cdh%3D%3E27a30245%7C%7C%7Clast_req%3D%3E1617165403%7C%7C%7Csid%3D%3E1617165403961329323%7C%7C%7Cdsps%3D%3E0'

# 从cookie中获取时间戳
time_callback = re.findall('[0-9]{13}', cookie)[-1]
# print(time_callback)

def img_download(img_url):
    '''下载并保存图片'''

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
    }

    # 下载图片
    response = requests.get(img_url, headers = headers)
    if response.status_code != 200:
        print('Image download Error!')

    # 保存的图片的名称
    iname = img_url.split('/')[-1]

    # 保存图片
    with open('./cailiaolixue/' + iname, 'wb') as fp:
        fp.write(response.content)

def get_urls(page):
    '''得到图片链接'''

    url = 'https://openapi.book118.com/getPreview.html'

    headers = {
        'Accept': '*/*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Cookie': cookie,
        'Host': 'openapi.book118.com',
        'Pragma': 'no-cache',
        'Referer': 'https://max.book118.com/',
        'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
        'sec-ch-ua-mobile': '?0',
        'Sec-Fetch-Dest': 'script',
        'Sec-Fetch-Mode': 'no-cors',
        'Sec-Fetch-Site': 'same-site',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
    }

    times = str(int(time.time() * 1000))

    data = {
        'project_id': '1',
        'aid': '226572288',
        't': '21680590b4a45e8ce7af4406a71ce42b',
        'view_token': '_jS9X2H2hCTZ5H7fyadG@f7ZGPf5ZnZK',
        'page': page,
        'filetype': 'docx',
        'callback': 'jQuery183010559838597161075_' + time_callback,
        '_': times
    }

    response = requests.post(url, headers = headers, data = data)
    response.encoding = 'utf-8'
#        print(response.text)

    # 通过正则表达式得到图片网址, 并下载
    urls = re.findall(r'\\\/\\\/(.*?\.png)', response.text)
    for url in urls:
        time.sleep(0.5)
        url = 'https://' + url
        print(url)
        img_download(url)

def main():
    """主函数"""

    # 将图片保存在当前目录下的文件夹内,若'cailiaolixue'不存在,则创建
    if not os.path.exists('./cailiaolixue'):
        os.mkdir('./cailiaolixue')

    # 共300页
    for page in range(1, 300, 5):
        print(str(page) + ' / 300')
        time.sleep(0.6)
        get_urls(page)

if __name__ == "__main__":
    main()
    os.system('pause')


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

xy0225 发表于 2021-3-31 14:02
这个好,谢谢分享
叫我小王叔叔 发表于 2021-3-31 14:32
gentlespider 发表于 2021-3-31 15:31
刚看了下,cookie过期的问题应该是PREVIEW这个导致的(当然没有测试,不敢确定)
1.png
2.png
然后又看了下,这个值是递增的,如果不解js的话,应该让他没翻一页递增一次也可以维持cookie(不确定)
ycz0030 发表于 2021-3-31 15:33
不错,多谢分享
飞悦0616 发表于 2021-3-31 15:56
这个可以参考内容
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 18:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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