深夜,我用python爬取了整个斗图网站,不服来斗

本文分享了如何使用Python爬取斗图网的图片资源,包括分析网站结构、编写爬虫代码、处理分页和图片存储等关键步骤。

QQ、微信斗图总是斗不过,索性直接来爬斗图网,我有整个网站的图,不服来斗。

废话不多说,选取的网站为斗图啦,我们先简单来看一下网站的结构

网页信息

640?wx_fmt=png

从上面这张图我们可以看出,一页有多套图,这个时候我们就要想怎么把每一套图分开存放(后边具体解释)
通过分析,所有信息在页面中都可以拿到,我们就不考虑异步加载,那么要考虑的就是分页问题了,通过点击不同的页面,很容易看清楚分页规则

640?wx_fmt=png

很容易明白分页URL的构造,图片链接都在源码中,就不做具体说明了明白了这个之后就可以去写代码抓图片了

存图片的思路

因为要把每一套图存入一个文件夹中(os模块),文件夹的命名我就以每一套图的URL的最后的几位数字命名,然后文件从文件路径分隔出最后一个字段命名,具体看下边的截图。

640?wx_fmt=png

640?wx_fmt=png

这些搞明白之后,接下来就是代码了(可以参考我的解析思路,只获取了30页作为测试)全部源码


 

# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import os
class doutuSpider(object):
    headers = {
        "user-agent""Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}
    def get_url(self,url):
        data = requests.get(url, headers=self.headers)
        soup = BeautifulSoup(data.content,'lxml')
        totals = soup.findAll("a", {"class""list-group-item"})
        for one in totals:
            sub_url = one.get('href')
            global path
            path = 'J:\\train\\image'+'\\'+sub_url.split('/')[-1]
            os.mkdir(path)
            try:
                self.get_img_url(sub_url)
            except:
                pass

    def get_img_url(self,url):
        data = requests.get(url,headers = self.headers)
        soup = BeautifulSoup(data.content, 'lxml')
        totals = soup.find_all('div',{'class':'artile_des'})
        for one in totals:
            img = one.find('img')
            try:
                sub_url = img.get('src')
            except:
                pass
            finally:
                urls = 'http:' + sub_url
            try:
                self.get_img(urls)
            except:
                pass
    def get_img(self,url):
        filename = url.split('/')[-1]
        global path
        img_path = path+'\\'+filename
        img = requests.get(url,headers=self.headers)
        try:
            with open(img_path,'wb'as f:
                f.write(img.content)
        except:
            pass
    def create(self):
        for count in range(131):
            url = 'https://www.doutula.com/article/list/?page={}'.format(count)
            print '开始下载第{}页'.format(count)
            self.get_url(url)
if __name__ == '__main__':
    doutu = doutuSpider()
    doutu.create()

结果

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

总结

总的来说,这个网站结构相对来说不是很复杂,大家可以参考一下,爬一些有趣的

原创作者:loading_miracle,原文链接:
https://www.jianshu.com/p/88098728aafd

推荐阅读:人工智能吹的这么厉害,真值得入行么?

640?wx_fmt=png

爬取VIP网站需要注意以下几点: 1. **合法性**:确保你有权限访问和爬取这些数据,避免违反网站的使用条款和相关法律法规。 2. **反爬机制**:VIP网站通常会有反爬虫机制,如验证码、IP封禁、动态加载等,需要采取相应的技术手段来应对。 3. **请求频率**:控制爬虫的请求频率,避免对目标网站造成过大压力。 以下是一个使用Python爬取VIP网站的基本步骤和示例代码: ### 1. 安装必要的库 首先,确保安装了必要的Python库,如`requests`、`BeautifulSoup`和`Selenium`: ```bash pip install requests beautifulsoup4 selenium ``` ### 2. 使用`requests`库进行基本的网页请求 ```python import requests url = 'https://www.examplevipwebsite.com' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) if response.status_code == 200: print(response.text) else: print(f"Failed to retrieve the page, status code: {response.status_code}") ``` ### 3. 处理反爬机制 如果目标网站有反爬机制,可以使用`Selenium`来模拟浏览器行为: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") # 无头模式 driver = webdriver.Chrome(options=chrome_options) url = 'https://www.examplevipwebsite.com' driver.get(url) page_source = driver.page_source print(page_source) driver.quit() ``` ### 4. 解析网页内容 使用`BeautifulSoup`解析网页内容: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(page_source, 'html.parser') # 根据网页结构提取所需数据 data = soup.find_all('div', class_='desired-class') for item in data: print(item.text) ``` ### 5. 处理动态加载内容 如果网站内容是通过JavaScript动态加载的,`Selenium`可以等待页面加载完成: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, 'desired-id'))) ``` ### 6. 保存数据 将爬取的数据保存到文件或数据库中: ```python with open('data.txt', 'w', encoding='utf-8') as f: f.write(str(data)) ``` ### 总结 爬取VIP网站需要综合运用多种技术手段,并确保遵守相关法律法规和网站的使用条款。以上示例代码仅为基本框架,具体实现需要根据目标网站的实际情况进行调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值