python爬取某网站二次元图片

144 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

import sys
import time
import os
import requests
import re  # 正则表达式,进行文字匹配
from bs4 import BeautifulSoup  # (网页解析,获取数据)
import urllib.request, urllib.error  # 制定URL,获取网页数据,urllib.request urllib.error
import sqlite3

url = 'https://www.3gbizhi.com/tag/dongman/3.html'#自己增加format会吧,线性的,记得加sleep
headers = {
    'user-agent': '自己的user-agent'}
response = requests.get(url=url, headers=headers)
html = response.text
print(html)
# html.encode('utf-8')
urls = re.findall('<img lazysrc="(.*?)" lazysrc2x=".*?" height="348px" alt=".*?" title=".*?" />', html)
filename = 'D:\二次元图片爬取\'
print(urls)
if not os.path.exists(filename):
    os.mkdir(filename)


for url in urls:
    name = url.split('/')[-1]

    response = requests.get(url, headers=headers)
# with open(filename+'小猫咪'+'.png',mode='wb') as f:
    with open(filename + name, mode='wb') as f:
        f.write(response.content)

同步爬取,不过不是高清的图片,只有点击进去才能得到高清图,这个时候我想用用selenium模拟浏览器操作,用click点击,然后抓取xpath,不过在观察后发现照片网址有规律,所以高清图片的获取就有了简单方法

高清图片获取代码:

import sys
import time
import os
import requests
import re  # 正则表达式,进行文字匹配
from bs4 import BeautifulSoup  # (网页解析,获取数据)
import urllib.request, urllib.error  # 制定URL,获取网页数据,urllib.request urllib.error
import sqlite3

# url = 'https://www.3gbizhi.com/wallDM/4383.html'#自己增加format会吧,线性的,记得加sleep
k = int(input("请输入爬取页面数:"))

for i in range(0, k+1):

    url = 'https://www.3gbizhi.com/wallDM/{}.html'.format(4808-i)
    headers = {
        'user-agent': '自己的ua'}
    response = requests.get(url=url, headers=headers)
    html = response.text

    # html.encode('utf-8')
    # urls = re.findall('<img lazysrc="(.*?)" lazysrc2x=".*?" height="348px" alt=".*?" title=".*?" />', html)
    urls = re.findall('<img src="(.*?)" alt=".*?"></a>', html)
    filename = 'D:\二次元图片高清\'
    print(urls)
    time.sleep(0.1) #留点缓冲时间
    if not os.path.exists(filename):
        os.mkdir(filename)

    if len(urls) != 0:

        for url in urls:

            name = url.split('/')[-1]

            response = requests.get(url, headers=headers)
        # with open(filename+'小猫咪'+'.png',mode='wb') as f:
            with open(filename + name, mode='wb') as f:
                f.write(response.content)
    if i == k:
        print("爬取结束了")

网络爬虫,又称为网页蜘蛛、网络机器人,是一种按照一定的规则,自动请求万维网网站并提取网络数据的程序或脚本。

如果说网络像一张网,那么爬虫就是网上的一只小虫子,在网上爬行的过程中遇到了数据,就把它抓取下来。

这里的数据是指互联网上公开的并且可以访问到的网页信息,而不是网站的后台信息(没有权限访问),更不是用户注册的信息(非公开的)

介绍部分

Basic Auth

这是一种古老的、不安全的用户验证方式,一般会有用户授权的限制,会在headers的Autheration字段里要求加入用户名密码(明文),如果验证失败则请求就会失败,现在这种认证方式正在被淘汰。

 

Referer

链接的来源,通常在访问链接时,都要带上Referer字段,服务器会进行来源验证,后台通常会用此字段作为防盗链的依据。

 

User-Agent

后台通常会通过此字段判断用户设备类型、系统以及浏览器的型号版本。有些编程语言包里网络请求会自定义User-Agent,可以被辨别出来,爬虫中可以设置为浏览器的ua.

 

Cookie

一般在用户登录或者某些操作后,服务端会在返回包中包含Cookie信息要求浏览器设置Cookie,没有Cookie会很容易被辨别出来是伪造请求; 也有本地通过JS,根据服务端返回的某个信息进行处理生成的加密信息,设置在Cookie里面

效果如下:

image.png