妹子图数网页爬取

任务:将妹子图首页展示的200多页数据全部爬取下来

  • 在爬取的过程中,需要用到requests库来获取网页
  • 使用bs库来解析网页
  • 随后将图片以图集的形式保存到文件汇总

首先是获取所有图集url的函数

import requests
from bs4 import BeautifulSoup as bs
import threading
import time
import os
def get_base_url():
    """   获取妹子图的所有图集url,并返回url组成的列表   """
    url_list = []
    for i in range(3,232):
        url = "https://www.mzitu.com/" + str(i)

        headers = {
                "referer":"https://www.mzitu.com/193626",
                "user-agent":"chrome/10"
        }
        rsp = requests.get(url,headers=headers)
        soup = bs(rsp.text)
        for i in soup.select("dd"):
            url = i.a["href"]
            name = i.text
            url_list.append((name,url))

    return url_list

url_list = list(set(get_base_url()))  # 对图集去重,发现原本有4000+的url现在只有200+  大大减少了任务量
print(len(url_list))
for i in url_list:
    print(i) 


随后定义了一个函数来对每一个 url 进行操作

在观察了网页源代码之后,我发现了图集的第一章图的页面构造和以后几张图的页面构造是不一致的,因此我放弃了第一张图的爬取,直接转到获取后面的图片。如果要连同第一张图的图片也都获取下来,只需要加一个 if 语句判定之后构建对应的代码就可以获得整个图集。

def get_img(name,base_url):
    for i in range(2,100):
        url = base_url + "/" +  str(i)

        proxies = { "http": "http://111.160.169.54"}
        headers = {
            "referer":base_url,
            "user-agent":"chrome/10"
        }
        rsp = requests.get(url,headers=headers,proxies=proxies)
        if rsp.status_code == 200:
            soup = bs(rsp.text)
            img_url = soup.select("div.main-image")[0].p.img["src"]
            print(img_url)
            rsp = requests.get(img_url,headers=headers,proxies=proxies)
            path = "meizitu" + "\\" + name
            if not os.path.exists(path):
                os.mkdir(path)

            path = "meizitu" + "\\" + str(name) + "\\" + str(i) + ".png"
            with open(path,"wb+") as f:
                f.write(rsp.content)
        else:
            break

然后就是主函数

url_list = set(url_list)
for i in url_list:
    t = threading.Thread(target=get_img,args=(i[0],i[1],))
    t.start()
    t.join()

这样的话就可以得到所有的图集了

缺陷:

在碰到文件的创建时,总是会出现意料之外的错误,观察下来还是个人对python相关操作的理解不够,然后我选择遇到一个问题就解决一个问题,因此就不花时间去复习原本的内容了。

对文件的操作应该是如下所示

import os
path = "text"
if not os.path.exists(path):
    os.mkdir(path)

这样就可以创建一个文件夹了,但是要注意的是,当你的path字符串是以斜杠结尾的时候,python是会报错的,即使在字符串开头加上了r转义符也是如此,对应的解决办法就是讲斜杠挪出来,单独作为一个字符串加入到员路径字符串中,如此则可。

总结:

  1. 在昨天使用了独创的杨氏编程法之后,获益匪浅,一改之前手忙脚乱的常态,转而成为了一个模块编程的小小小小佬,我哈哈哈哈哈哈哈哈哈哈哈哈。
  2. 但是有时候还是会意气用事,会失去目的,思维短时间内会陷入混乱以至于浪费了时间的同时也延缓了最终程序的构建,着实是一大毛病,是我成长路上的一大绊脚石,是需要着重重视的问题,是能够在编程汇总保持良好心态的关键。希望自己以后能够多加注意,但是不要试图仅凭自己的意志力去抑制思维的发散,还可以适度借助外部工具的力量,比如思维导图;比如带有提示性的信息等等。不一而足。
  3. 哈哈哈哈哈哈哈哈刀哈哈哈哈哈哈哈哈哈诸位告辞。
  4. 要是有哪个小伙伴看到了之后,欢迎给我留言啊!!!!

原文地址:https://www.cnblogs.com/baihuatian/p/11600659.html

时间: 2024-10-01 00:18:35

妹子图数网页爬取的相关文章

动态网页爬取例子(WebCollector+selenium+phantomjs)

目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>. 这里用了WebCollector 2进行爬虫,这东东也方便,不过要支持动态关键还是要靠另外一个API -- selen

WebFetch 是无依赖极简网页爬取组件

WebFetch 是无依赖极简网页爬取组件,能在移动设备上运行的微型爬虫. WebFetch 要达到的目标: 没有第三方依赖jar包 减少内存使用 提高CPU利用率 加快网络爬取速度 简洁明了的api接口 能在Android设备上稳定运行 小巧灵活可以方便集成的网页抓取组件 使用文档 WebFetch的使用非常简单,让小白用户快速上手,WebFetch为用户配置默认页面处理方法,默认将抓取到的页面信息使用System.out.print输出到控制台(通过配置PageHandler修改默认操作).

python动态网页爬取——四六级成绩爬取

需求: 四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页.我使用的是学信网,好了,网站截图如下: 网站的代码如下: 1 <form method="get" name="form1" id="form1" action="/cet/query"> 2 3 <table

动态网页爬取

四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页.我使用的是学信网,好了,网站截图如下: 网站的代码如下: 1 <form method="get" name="form1" id="form1" action="/cet/query"> 2 3 <table bord

网页爬取

1.图片爬取代码 import requests import os root = "H:/美图/" url = "https://k.zol-img.com.cn/sjbbs/7692/a7691501_s.jpg" path = root + url.split("/")[-1] try: if not os.path.exists(root): os.mkdir(root) if not os.path.exists(path): r =

用python进行网页爬取,数据插入数据库

用python进行网页信息的爬取还是很简单的,而且现在进行爬取的 在爬取之前,确定好自己的网页,然后用F12(查看网页源代码,然后确定网页的),这里就以一个简单的,页面布局简单的页面进行讲解:http://jbk.39.net/yyz/jbzs/ 先来看下页面的布局,以及我们想要进行页面的信息: 就这个页面,我们想要从这里面将页面中的疾病的名称,还有就是疾病的介绍,以及疾病的基本信息(是否属于医保.别名.发病部位.传染性...) 代码很简单: #!/usr/bin/env python # co

7-13爬虫入门之BeautifulSoup对网页爬取内容的解析

通过beautifulsoup对json爬取的文件进行元素审查,获取是否含有p标签 # -*- coding:utf-8 -*- from lxml import html import requests import json import re import scrapy from bs4 import BeautifulSoup #通过beautifulsoup解析文档 def bs4analysis(html_doc): soup = BeautifulSoup(html_doc,"lx

Python静态网页爬取:批量获取高清壁纸

前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我们要下载高清的图) 4.保存图片 实际操作时,我们实现了如下几步网页地址的访问:打开了壁纸的网页→单击壁纸图打开指定页面→选择分辨率,点击后打开最终保存目标图片网页→保存图片 在爬虫的过程中我们就尝试通过模拟浏览器打开网页的操作,一步步获得.访问网页.最后获得目标图片的下载地址,对图片进行下载保存到

python 网页爬取数据生成文字云图

1. 需要的三个包: from wordcloud import WordCloud #词云库 import matplotlib.pyplot as plt #数学绘图库 import jieba; 2. 定义变量(将对于的变量到一个全局的文件中): import re; pdurl_first='https://movie.douban.com/subject/26363254/comments?start=0' head={'User-Agent':'Mozilla/5.0 (X11; L