澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:妹子图爬虫,爬取天涯

大家的读书爬虫的动力是什么样?

有人大概会说:假使本身学好了,我能够找贰个高薪的做事。

有人大概会说:小编学习编制程序希望能够为社会做进献(手动滑稽)

有人恐怕会说:为了妹子!

.....

实则大家会开掘妹子才是率先生产力呀!

今日我们正是爬取今日头条,你要问笔者怎么要爬取新浪?是因为爱嘛?

是因为权利嘛?

不,是因为头条里面包车型大巴有那一个佳丽图片,然后我们得以把她们都爬取下来!!!

是或不是考虑都认为相当的慢乐,是或不是都要流鼻血了?!

澳门新浦京娱乐场网站 1

 

咱俩要做的正是把下面的图形给爬下来。

澳门新浦京娱乐场网站 2

 

初识Python爬虫

连串地址 https://github.com/3inchtime/CX_spiders

运作情况: python : 3.5.2 requests:2.11.1 pymongo:3.5.1 MongoDB:3.4.7

起来分析网址

按下f12,然后点击network,刷新下你能够看出这个

澳门新浦京娱乐场网站 3

 

澳门新浦京娱乐场网站:妹子图爬虫,爬取天涯论坛街拍图。在网页上得以看看图片会趁着你下拉网页而举办展示更加多的图样。

乐乎的网址是动态加载的,其实能够很自在的就足以在xhr的文书之中找到。

澳门新浦京娱乐场网站 4

 

穿梭地发送需要,点击那几个供给看看是回来什么数据

澳门新浦京娱乐场网站 5

 

澳门新浦京娱乐场网站 6

 

能够看见那是个json,里面有图表的url,这几个便是我们要找的东西。

大家得以用json库来深入分析,还应该有那几个网址是get供给,这样就能够用requests库来发送然后分析下就足以了,很简单。

互联网

粗略来讲网络是由一个个站点和互联网设施组成的网格,大家通过浏览器访问站点,站点把HTML、JS、CSS代码再次来到给浏览器,这个代码通过浏览器剖判、渲染,将丰富多彩的网页展现大家如今;

用作Python的初读书人,爬虫断定是入门的不二挑选,不仅可以熟习语法,又能经过爬虫领会一定的网络编制程序知识。

要想全盘的食用本篇教程,首先你必要精通Python的根基语法以致基础的数据结构,之后最棒刺探Python面向对象编制程序,还应该有xpath的主导语法。
有关Python3的教程作者十一分推荐介绍廖雪峰先生的Python教程
https://www.liaoxuefeng.com/
xpath特别轻便,完全能够一边施行一边上学
http://www.w3school.com.cn/xpath/index.asp

品种目标:爬取今日头条中有关“街拍”图聚焦的图形,并保存相关数据到数据库

代码

 

澳门新浦京娱乐场网站 7

澳门新浦京娱乐场网站 8

 

终极给您们看下结果

澳门新浦京娱乐场网站 9

 

上述文章如有错误接待在留言区提出,即使那篇小说对您有用,点个赞,转个发什么?

一、什么是爬虫

网络爬虫(又被称呼网页蜘蛛,网络机器人,在FOAF社区中间,更偶尔的名称叫网页追逐者),是一种根据一定的平整,自动地抓取万维网信息的主次照旧脚本。别的一些临时使用的名字还可能有蚂蚁、自动索引、模拟程序或然蠕虫。如果我们把网络比作一张大的蜘蛛网,数据就是寄放在于蜘蛛网的一一节点,而爬虫便是一头小蜘蛛,沿着网络抓取自个儿的猎物爬虫指的是:向网址发起呼吁,获取财富后剖析并领取有用数码的次序;从本事层面来讲就是通进度序模拟浏览器哀告站点的行事,把站点重临的HTML代码/JSON数据/二进制数据 爬到地面,进而提取自个儿必要的多寡,寄放起来使用;

菜鸟司机上路,请留意!!!

爬虫的原理其实异常粗略,模仿人浏览网页并记下数据。
大家的靶子网址——www.mmjpg.com

品类中须求利用的包

import re
from hashlib import md5
import pymongo
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
import requests
from config import *
from multiprocessing import Pool

上边来三个三个分解:

  1. json:本次爬取的多寡多为 json 格式,所以须求將数据转变为 json 再张开下一步管理。
  2. md5:下载图片给图片命名时,有十分大或然有些图片会再一次,为了防止再度下载,使用 hashlib 模块的 md5 方法依照图片的内容给图片命名。(要求领悟 hashlib 可点击这里)
  3. pymongo:python 连接 mongodb 的包
  4. RequestException:在开展网页需要时,恐怕会生出局部荒唐,在这里间直接抛出
  5. requests:请求库
  6. config:代码中的一些安顿音信
  7. Pool:三十二线程进步代码运行作效果能

二、爬虫的着力流程:

顾客得到网络数据的办法:方式1:浏览器提交诉求--->下载网页代码--->分析成页面格局2:模拟浏览器发送要求->提取有用的数量->存放于数据库或文件中爬虫要做的正是艺术2;其实,爬虫的长河和浏览器浏览网页的长河是一致的。道理我们应该都精晓,正是当大家在键盘上输入网站点击寻觅之后,通过互连网首先会由此DNS服务器,分析网站的域名,找到了实在的服务器。然后我们经过HTTP合同对服务器发出GET或POST央浼,若央浼成功,大家就获得了大家想见见的网页,平常都以用HTML, CSS, JS等前端本领来营造的,若须要不成功,服务器会回来给大家恳请退步的状态码,常来看的503,403等。1、发起呼吁使用http库向目的站点发起呼吁,即发送一个RequestRequest包含:诉求头、央求体等Request模块缺陷:不能够执行JS 和CSS 代码2、获取响应内容一经服务器能平日响应,则会收获贰个ResponseResponse饱含:html,json,图片,摄像等3、深入分析内容深入分析html数据:正则表明式,第三方深入分析库如Beautifulsoup,pyquery等分析json数据:json模块解析二进制数据:以wb的办法写入文件4、保存数据数据库(MySQL,Mongdb、Redis)文件

一经您未来曾经展开了那么些网址,求求你们,把持住本人!!!

先是大家询问一下相似的爬虫的规律

澳门新浦京娱乐场网站 10

实际爬虫的规律正是二个机械化的浏览网页的过程,只但是由程序帮我们获取音信而已
那就是说相应的,爬虫有三种普及利用的政策

网站剖判

  1. 网址图集中不是行使翻页,而是随鼠标的暴跌自动加载,在那之中独有乞请参数 “offset” 改造(0、20、40递增)
  2. 各种图片集的 url 在 data 当中,如图

澳门新浦京娱乐场网站 11

  1. 每张图片的 url 在网页文书档案的 gallery 中,能够动用正则获取 url

三、、 request

1、伏乞情势:2、诉求的U奥迪Q5Lurl编码3、乞请头4、诉求体央浼体

小结爬虫流程:

纵深优先

深度优先,看名就可见意思,深正是要点,要尽量的深!当您爬取完八个网页时,接着爬取那么些页面中涉嫌的任何页面,就好像此一层一层的爬取下去,直到未有相关联的网页。

深度优先政策是指爬虫从有个别U途胜L开首,三个链接三个链接的爬取下去,直各管理完了某些链接所在的持有线路,才切换成任何的线路。

代码详细的情况

互联网

大概来讲互连网是由三个个站点和网络设施组成的网格,我们透过浏览器访问站点,站点把HTML、JS、CSS代码再次来到给浏览器,那几个代码通过浏览器剖析、渲染,将五颜六色的网页呈现大家前边;

广度优先

同理,广度优先,要点正是广。

广度优先遍历战术的基本思路是,将新下载网页中发觉的链接直接插入待抓取UMuranoL队列的末段。也便是指网络爬虫会先抓取开端网页中链接的享有网页,然后再选拔之中的贰个链接网页,继续抓取在这里网页中链接的具备网页。

本来这两种政策并非其他一种都足以采用的,要结合你要爬取的网页和您要赢得哪些数据而调整的。


一、央求索引页并剖析

须要索引页

def get_page_index(offset, keyword):
    '''返回请求索引页的代码详情'''

    #请求参数设置
    data = {
        'offset': offset,
        'format': 'json',
        'keyword': keyword,
        'autoload': 'true',
        'count': 20,
        'cur_tab': 3
    }
    url = 'http://www.toutiao.com/search_content/?'   urlencode(data)
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        print("请求索引页出错")
        return None

深入分析索引页

def parse_page_index(html):
'''解析索引页,获取页面url'''

    # 將 html 转换为 json 格式的数据
    data = json.loads(html)
    if data and 'data' in data.keys():
        for item in data.get('data'):
            yield item.get('article_url')

一、什么是爬虫

网络爬虫(又被称为网页蜘蛛,互联网机器人,在FOAF社区中间,更常常的名为网页追逐者),是一种依照一定的平整,自动地抓取万维网消息的程序依然脚本。别的一些不常使用的名字还会有蚂蚁、自动索引、模拟程序或然蠕虫。借使大家把互连网比作一张大的蜘蛛网,数据就是寄存在于蜘蛛网的依次节点,而爬虫就是二头小蜘蛛,沿着互联网抓取本身的猎物爬虫指的是:向网址发起呼吁,获取能源后解析并领取有用数码的顺序;从手艺层面来讲便是通进度序模拟浏览器恳求站点的一坐一起,把站点再次来到的HTML代码/JSON数据/二进制数据 爬到地面,进而提取自个儿须要的数额,存放起来使用;

前段时间,让咱们踩下加速踏板,初始飙车!!!

大家的指标是保留每一种妹子的图片,并以文件夹的样式保留在大家的Computer上。

率先大家剖判这么些网址的url,那是非常重要的一步

首页 www.mmjpg.com 能够翻页,它的第二页是http://www.mmjpg.com/home/2,那时大家把2改成1,是或不是就足以跳转到第一页呢?

澳门新浦京娱乐场网站 12

哇!!居然是404!!!

因而大家未来了然到,那几个网址率先页为www.mmjpg.com,前面包车型地铁页面为http://www.mmjpg.com/home/n ,n是页码。
最近,最终一页为http://www.mmjpg.com/home/88,所以大家最多能爬取到88页妹子图,看来这一个网址近日只更新了这么多,依据每页14个二姐,那么......

故而,笔者使用的战术是这么的:

  1. 首先应该输入我们须求爬取到有些页。(举个例子20页,那么大家就爬取1-20页。)
  2. 大家逐一爬取那一个页面上具有妹子的图片页面。(比如第1页有十六个二嫂,那么我们就把那14个表妹的url爬下来。)
  3. 末段我们进去四姐的页面,依次爬取下妹子的图形,并保存在本土。

不容置疑了,那终将不是最优的爬取战略,假设你有更加好的计谋,请在商酌区留言。

自个儿的付出情形为 Ubuntu 16.04 LTS 以致Python3.6.4,理论上是相配Windows和Mac OS的。

鉴于我们的爬虫并非很复杂,所以并无需使用其余爬虫框架,大家尊崇运用的是Reqests库

Requests库十三分强有力,Requests 是使用 Apache2 Licensed 许可证的 基于Python开垦的HTTP 库,其在Python内置模块的根基上海展览中心开了冲天的包装,进而使得进行互联网央浼时,使用Requests能够简单的完结浏览器可有的任何操作。


二、恳求详细的情况页并分析

恳请详细情形页

def get_page_detail(url):
'''获取详情页的代码'''

    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        print('请求详情页出错', url)
        return None

深入分析页面,获取图集名称和每张图片 url

def parse_page_detail(html, url):
'''解析详情页的代码,获取每张图片的 url '''

soup = BeautifulSoup(html, 'lxml')
title = soup.title.text
# 或者 title = soup.select('title')[0].get_text()
# print(title)
images_pattern = re.compile('gallery:(.*?)ssiblingList:', re.S)
result = re.search(images_pattern, html)
if result:
    # print(result.group(1)[:-5])
    # 把结果转换为课处理的 json 格式
    data = json.loads(result.group(1)[:-5])
    if data and 'sub_images' in data.keys():
        images = [item.get('url') for item in data.get('sub_images')]
        for image in images:
            download_imgae(image)
        return {
            'title': title,
            'url': url,
            'images': images
        }

二、爬虫的中坚流程:

客户获得网络数据的点子:情势1:浏览器提交央浼—>下载网页代码—>剖析成页面方式2:模拟浏览器发送央浼->提取有用的数目->存放于数据库或文件中爬虫要做的就是方法2;

明日专门的学问启幕代码时间

既是大家要依赖面向对象的思维写那几个爬虫,那么大家就须要把这一个爬虫写成二个类。

# -*- coding: utf-8 -*-
import requests
from lxml import etree

class Spider(object):
    def __init__(self, page_num):
        self.page_num = page_num
        self.page_urls = ['http://www.mmjpg.com/']
        self.girl_urls = []
        self.girl_name = ''
        self.pic_urls = []

    def get_girl_urls(self):
        pass

    def get_pic_urls(self):
        pass

    def download_pic(self):
        pass

if __name__ == '__main__':
    pass          

我们使用lxml中的etree操作xpath,进而得到自己要想要爬取的字段。
想要实例化大家的爬虫类,page_num是必得输入的参数,所以客商必得在实例化这一个类时输入页码。

因为这些网址的第1页与前面的网页url未有规律,何况顾客起码会爬取第1页,所以我们先将首页归入page_urls中,之后调用get_page_urls()获取具备想要爬取的url。

依赖大家的爬虫攻略,先调用get_girl_urls()抓取全部妹子的url,将它们保存到girl_urls这个list中,之后将girl_urls传递给get_pic_urls(),获取具备图片的url保存到pic_urls,最终调用download_pic()下载图片。

最后的main函数则用来让顾客输入想要爬取的页码以致实例化Spider类。

于是,首先我们先来抓取全部妹子的url
在get_page_urls()中我们先是决断输入的页码(这里大家就不做输入负数的论断了),在赢获得page_num后拼接出全部要爬取的页面url

    def get_page_urls(self):
        if int(page_num) > 1:
            for n in range(2, int(page_num) 1):
                page_url = 'http://www.mmjpg.com/home/'   str(n)
                self.page_urls.append(page_url)
        elif int(page_num) == 1:
            pass

这样page_urls中就贮存了小编们具备要爬取的页面url了。

开辟首页,调出开采者工具

澳门新浦京娱乐场网站 13

咱俩原则性到二妹的url,大家能够很轻松的写出妹子url的xpath。

小编们运用Requests的get()办法,获取到这一页的HTML页面,并调用etree.HTML()将html转化成能够用xpath定位成分的格式。

妹子的url的xpath很轻巧就能够标志出来,它是class="title"的span标签下的a标签的href属性。

    def get_girl_urls(self):
        for page_url in self.page_urls:
            html = requests.get(page_url).content
            selector = etree.HTML(html)
            self.girl_urls  = (selector.xpath('//span[@class="title"]/a/@href'))

那般我们就获得到了大家要抓取的具有页面中的妹子url。


接下去大家将在获取每张图纸的url了。
点进一个妹子的页面,大家发掘每一页独有一张图片,页面包车型客车最下方有翻页,全体图形,下一张。

澳门新浦京娱乐场网站 14

依据正规的方式,大家如若获得二个表姐的图片总的数量,平常这种图片的url都以很有规律的,我们就能够凑合出全体图片的url,因为日常的图片链接都是有规律的。

调出开辟者工具(集中力不要放在妹子上!!!)。

澳门新浦京娱乐场网站 15

啊???那些图片的url怎么看起来很奇异???往下点了几页,开掘全部的url毫无规律,看来大家相遇了一个细微的劳碌,那样大家就不能够由此平日的url拼接来获取图片的链接了,那大家现在该如何是好吧?


自个儿个人有三种消除办法:

  1. 一页一页的获取图片的url,大家可以赢得第一页上的图样之后,进入下一页爬取下一页的图片,由此及彼,直到爬下那一个妹子全体的图纸。
    以此办法是一种很健康的做法,很轻松完结,不过远远不够文雅。
  2. 我们开掘每一页都有三个开关 “全体图形” ,大家点击任何图片之后,我们就看见了颇负图片的url。
![](https://upload-images.jianshu.io/upload_images/11519805-ec6c6e4af0be50ae.png)



这样我们就得到了所有图片的url,那么问题来了,爬虫本身并不具备点击这个按钮的功能,但是要想获取所有图片的url,我们必须点击这个按钮之后才能得到,怎么办呢?

那时候,小编就要向你们介绍一大神器——Selenium

Selenium 是为了测验而诞生的. 然则没悟出到了爬虫的时代, 它产生, 变成了爬虫的好工具。
Seleninm: 它能决定你的浏览器, 有模有样地学人类”看”网页

Selenium能够垄断(monopoly)浏览器浏览网页,而且它能够点击开关,乃至输入文字,是或不是非常美丽妙?
Selenium能够决定的浏览器有无数,小编选用了相比较常用的Chrome。

pip install selenium

从此下载你供给调节的浏览器对应的驱动。
https://www.seleniumhq.org/download/

澳门新浦京娱乐场网站 16

澳门新浦京娱乐场网站 17

下载你需求的驱动,到你常用的目录就可以啦!


上面大家选取Selenium来模拟点击“全体图形”的按键,来赢得具有图片的url了。

import time
from selenium import webdriver

    def get_pic_urls(self):
        driver = webdriver.Chrome('你的webdriver路径')
        for girl_url in self.girl_urls:
            driver.get(girl_url)
            time.sleep(3)
            driver.find_element_by_xpath('//em[@class="ch all"]').click()

此处首先要实例化一个Chromedriver,webdriver的门道必须求准确到可推行文件。

咱俩先采取webdriver的get()措施要求到页面,之后选拔find_element_by_xpath()格局,用xpath标志到必要点击的按键,之后调用click()措施点击那一个开关,这样就做到了大家决定浏览器获取具备图片的经过啦!

要是一切符合规律的话,那时当您运转程序时,会有一个受程控的浏览器打开,并在八分钟后,“全体图纸”的开关会被点击,你就阅览了除第一张以外其余的图形。

那儿我们调出开采者工具,大家就看看了独具图片的url了。

澳门新浦京娱乐场网站 18

现行反革命大家就能够获得每张图片的url了,顺便获取一下妹子的标题。

    def get_pic_urls(self):
        driver = webdriver.Chrome('/home/chen/WorkSpace/tools/chromedriver')
        for girl_url in self.girl_urls:
            driver.get(girl_url)
            time.sleep(3)
            driver.find_element_by_xpath('//em[@class="ch all"]').click()
            time.sleep(3)
            # 这里暂停3秒之后获取html的源代码
            html = driver.page_source
            selector = etree.HTML(html)
            self.girl_name = selector.xpath('//div[@class="article"]/h2/text()')[0]
            self.pic_urls = selector.xpath('//div[@id="content"]/img/@data-img')

在运用Selenium模拟点击之后,肯定要选择time.sleep()暂停几秒,大家要求给页面中的JS代码时间,加载出图片的url,要是你不间断几秒的话,除非JS的加载速度能快过大家代码的实施进程,不然我们是得不到图片的url的。

在历次测量试验程序的时候总会有大家调用的Chrome出现,为了避防妹子郁闷大家干正事(咳咳咳......),大家得以动用不加载图片的Chrome来爬取数据,当然了,大家也得以遮掩Chrome。

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("--headless")
chrome_path = '/home/chen/WorkSpace/tools/chromedriver'

    def get_pic_urls(self):
        driver = webdriver.Chrome(chrome_path, chrome_options=chrome_options)
                                     .
                                     .
                                     .

--headless是无分界面Chrome的选项
prefs = {"profile.managed_default_content_settings.images": 2}是让Chrome不加载图片,因为大家并不须要让图片加载出来,大家只需求获得url就丰硕了,那样可以减小响应的时刻。
那么,你势必会问作者,既然能够行使无分界面包车型地铁Chrome,为何还须要加上不加载图片的选项呢,实际上无界面包车型客车Chrome也是会加载图片的,只是你看不到罢了。
如此就再也不会有妹子来滋扰大家撸代码了......

跟着就调用大家的下载图片的主意。

import os

PICTURES_PATH = os.path.join(os.getcwd(), 'pictures/')

    def download_pic(self):
        try:
            os.mkdir(PICTURES_PATH)
        except:
            pass
        girl_path = PICTURES_PATH   self.girl_name
        try:
            os.mkdir(girl_path)
        except Exception as e:
            print("{}已存在".format(self.girl_name))
        img_name = 0
        for pic_url in self.pic_urls:
            img_name  = 1
            img_data = requests.get(pic_url)
            pic_path = girl_path   '/'   str(img_name) '.jpg'
            if os.path.isfile(pic_path):
                print("{}第{}张已存在".format(self.girl_name, img_name))
                pass
            else:
                with open(pic_path, 'wb')as f:
                    f.write(img_data.content)
                    print("正在保存{}第{}张".format(self.girl_name, img_name))
                    f.close()
        return

此处先安装好图片积存的渠道,在当前目录下的pictures中,当然了,为了体验更友好,笔者也写了推断图片和图表文件夹是否早就存在的办法,已经存在的图纸就能够跳过,那样大家就能够频频应用爬虫而即使已经存在文件而报错了,最终采用os.write()措施就足以保留图片了。

到这里大家就下载到了图片,快速展开欣赏一番吧!!!

澳门新浦京娱乐场网站 19

三、將数据保存到数据库

数据库配置新闻

MONGO_URL = 'localhost'   #数据库地址
MONGO_DB = 'toutiao'      #数据库名称
MONGO_TABLE = 'toutiao'   #表名称

三回九转数据库

client = pymongo.MongoClient(MONGO_URL, connect=False)
db = client[MONGO_DB]

將数据保存到数据库

def save_to_mongo(resutl):
'''把结果存储到 mongodb 数据库中'''

    if db[MONGO_TABLE].insert(resutl):
        print('存储到MongoDB成功', resutl)
        return True
    return False

爬虫进度

骨子里,爬虫的长河和浏览器浏览网页的进度是均等的。道理大家应该都清楚,便是当大家在键盘上输入网站点击寻觅之后,通过互连网首先会透过DNS服务器,深入分析网站的域名,找到了真正的服务器。然后我们因而HTTP合同对服务器发出GET或POST央浼,若央求成功,大家就获得了小编们想看见的网页,通常都是用HTML, CSS, JS等前端手艺来创设的,若乞求不成事,服务器会回到给大家呼吁失利的状态码,常来看的503,403等。1、发起呼吁使用http库向指标站点发起呼吁,即发送三个RequestRequest满含:需要头、乞请体等Request模块缺欠:不能够实行JS 和CSS 代码2、获取响应内容假使服务器能健康响应,则会获取三个ResponseResponse满含:html,json,图片,摄像等3、剖析内容深入分析html数据:正则表明式,第三方解析库如Beautifulsoup,pyquery等剖判json数据:json模块分析二进制数据:以wb的措施写入文件4、保存数据数据库(MySQL,Mongdb、Redis)文件

WHAT THE FUCK !!??!!??

因此看来我们相见了这些网址的反爬虫,相当多网址都能够辨认爬虫,极其是大家这种很初级的爬虫,一抓二个准。那大家怎么做技巧制止被反爬虫识别出来吧?

那实在是一门很深的学识,反爬虫与反反爬虫的拼搏已经过了不短时间,可是那点难题只怕难不倒大家的。

本身此前说过,爬虫正是仿照人浏览网页来获取数据,那么既然不想被反爬虫识别出来,那么大家的爬虫就要更像人平等浏览网页,那么大家日前到底离模拟人浏览网页差多少路程呢???

大家只须求把大家的爬虫伪装成浏览器就能够了。

莫非大家要选择Selenium调整Chrome来爬取网页么?

不,完全没有供给!那就须求大家有个别Computer网络的基础知识了,大家浏览网页,绝大比非常多状态下都以依照HTTP合同的,在HTTP合同中,我们每回浏览网页都要发送三个Headers央求头,在诉求头中包涵了无数第一的东西。

澳门新浦京娱乐场网站 20

当今大家就来相比较一下大家如常访谈该网址的二嫂图片和一向看堂姐图片的央浼头有如何区别。

澳门新浦京娱乐场网站 21

那是我们因此正规浏览网页,第一张图纸的乞求头。现在大家把第一张图片的url复制下来,重新张开浏览器,输入url,看看会时有爆发哪些?
深信不疑你早就看见了,出现在大家面前的便是刚刚让我们失望的这张图片了,今后我们来寻访它的央求头是怎么?

澳门新浦京娱乐场网站 22

在最上面一栏Request Headers中,大家开掘重回失利的那张图纸参数字呈现明要多出累累,可是那都不是重大,关键就在于它少了哪些?

自家信赖通过对照你曾经意识了眉目,那正是Referer

Referer是用来判别这么些HTTP诉求是从哪个网址跳转过来的,当我们健康访谈那么些网址时,HTTP伏乞中的Referer都以'http://www.mmjpg.com/mm/xxxx',包括了那一个Referer属性的伸手就足以健康浏览图片,反之,当大家直接待上访谈那个图形的链接,大家的HTTP乞请中不分包Referer,那么服务器就可以咬定大家而不是在寻访他们的网址,就将我们识别为爬虫了,进而再次来到了那张不是我们希望的那张图片。

现行反革命,既然大家早就解析出了缘由,那么大家要什么手艺消除那几个题材吗?
别思念,Request库早都为大家提供了消除办法,当大家运用Requests时,不只能加多url进去同不常间也足以参与headers。

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/65.0.3325.181 Safari/537.36',
    'Referer': "http://www.mmjpg.com"
}

我们假设在requests.get()中步入headers就能够了。

img_data = requests.get(pic_url, headers=headers)

于今,大家再次运转咱们的爬虫!!!

澳门新浦京娱乐场网站 23

成功!!!
接下去放上全体代码

# -*- coding: utf-8 -*-
import os
import requests
from lxml import etree
import time

from selenium import webdriver

# 将Chrome设置成不加载图片的无界面运行状态
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("--headless")
chrome_path = '/home/chen/WorkSpace/tools/chromedriver'

# 设置图片存储路径
PICTURES_PATH = os.path.join(os.getcwd(), 'pictures/')

# 设置headers
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/65.0.3325.181 Safari/537.36',
    'Referer': "http://www.mmjpg.com"
}


class Spider(object):
    def __init__(self, page_num):
        self.page_num = page_num
        self.page_urls = ['http://www.mmjpg.com/']
        self.girl_urls = []
        self.girl_name = ''
        self.pic_urls = []

# 获取页面url的方法
    def get_page_urls(self):
        if int(page_num) > 1:
            for n in range(2, int(page_num) 1):
                page_url = 'http://www.mmjpg.com/home/'   str(n)
                self.page_urls.append(page_url)
        elif int(page_num) == 1:
            pass

# 获取妹子的url的方法
    def get_girl_urls(self):
        for page_url in self.page_urls:
            html = requests.get(page_url).content
            selector = etree.HTML(html)
            self.girl_urls  = (selector.xpath('//span[@class="title"]/a/@href'))

# 获取图片的url的方法
    def get_pic_urls(self):
        driver = webdriver.Chrome(chrome_path, chrome_options=chrome_options)
        for girl_url in self.girl_urls:
            driver.get(girl_url)
            time.sleep(3)
            driver.find_element_by_xpath('//em[@class="ch all"]').click()
            time.sleep(3)
            html = driver.page_source
            selector = etree.HTML(html)
            self.girl_name = selector.xpath('//div[@class="article"]/h2/text()')[0]
            self.pic_urls = selector.xpath('//div[@id="content"]/img/@data-img')
            try:
                self.download_pic()
            except Exception as e:
                print("{}保存失败".format(self.girl_name)   str(e))

# 下载图片的方法
    def download_pic(self):
        try:
            os.mkdir(PICTURES_PATH)
        except:
            pass
        girl_path = PICTURES_PATH   self.girl_name
        try:
            os.mkdir(girl_path)
        except Exception as e:
            print("{}已存在".format(self.girl_name))
        img_name = 0
        for pic_url in self.pic_urls:
            img_name  = 1
            img_data = requests.get(pic_url, headers=headers)
            pic_path = girl_path   '/'   str(img_name) '.jpg'
            if os.path.isfile(pic_path):
                print("{}第{}张已存在".format(self.girl_name, img_name))
                pass
            else:
                with open(pic_path, 'wb')as f:
                    f.write(img_data.content)
                    print("正在保存{}第{}张".format(self.girl_name, img_name))
                    f.close()
        return

# 爬虫的启动方法,按照爬虫逻辑依次调用方法
    def start(self):
        self.get_page_urls()
        self.get_girl_urls()
        self.get_pic_urls()


# main函数
if __name__ == '__main__':
    page_num = input("请输入页码:")
    mmjpg_spider = Spider(page_num)
    mmjpg_spider.start()

今昔您就足以逐步爬妹子图了,注意最佳在恳求的时候time.sleep()几秒钟,乞求太频仍的话,也会有必然的可能率被识别为爬虫的,尽管本身并不曾尝试,可是本人也建议你如此做,因为,过于频仍的伏乞依旧会让服务器吃不消,看在居家的图形这么良心的事态下,爬慢点......

仅供就学
转发评释出处
禁绝商业用途

下载图片并保存图片

下载图片

def download_imgae(url):
'''解析图片url'''

    print('正在下载:', url)
    try:
        response = requests.get(url)
        if response.status_code == 200:
            save_image(response.content)
        return None
    except RequestException:
        print('请求图片出错', url)
        return None

保存图片到当前目录

def save_image(content):
'''保存文件'''

    file_path = '{0}{1}.{2}'.format(os.getcwd(), md5(content).hexdigest(), 'jpg')
    if not os.path.exists(file_path):
        with open(file_path, 'wb') as f:
            f.write(content)

三、、 request

1、央求格局:常见的伏乞方式:GET / POST2、诉求的ULacrosseLurl全世界统一能源定位符,用来定义互联英特网两个独一的能源比如:一张图纸、一个文件、一段录制都能够用url独一明确url编码网页的加载进度是:加载一个网页,常常都以先加载document文书档案,在剖析document文书档案的时候,遭遇链接,则指向超链接发起呼吁3、伏乞头User-agent:央浼头中只要未有user-agent客商端配置,服务端大概将您作为多个地下客户host;cookies:cookie用来保存登陆新闻诉求头必要在乎的参数:Referrer:访谈源至哪个地方来(一些重型网址,会透过Referrer 做防盗链战术;全部爬虫也要潜心模拟)User-Agent:访问的浏览器(要增进否则会被当成爬虫程序)cookie:乞请头注意指点4、诉求体乞请体若是是get方式,央浼体未有内容 (get央求的要求体放在 url前边参数中,直接能收看)要是是post形式,乞请体是format dataps:1、登陆窗口,文件上传等,消息都会被增大到乞请体内2、登陆,输入错误的顾客名密码,然后交到,就足以看看post,正确登入后页面平时会跳转,无法捕捉到post

四、主函数

主函数

def main(offset):
'''主函数'''

html = get_page_index(offset, KEYWORD)
# print(html)
for url in parse_page_index(html):
    html = get_page_detail(url)
    if html:
        result = parse_page_detail(html, url)
        # print(result)
        if result:
            save_to_mongo(result)

前后相继入口

if __name__ == '__main__':
    groups = [x * 20 for x in range(GROUP_START, GROUP_END)]
    pool = Pool()
    pool.map(main, groups)

参数表明

#需要爬取的页数配置参数
GROUP_START = 1
GROUP_END = 20

#爬取关键词
KEYWORD = '街拍'

小结爬虫流程:

爬取—>解析—>存储

小编最近照看了一套Python学习课程,有亟待的伴儿,记得来作者的沟通群:556370268,就能够无需付费领取一套Python学习课程哦

巨坑之处

  1. 正则获取 gallery 内容时, gallery 是以 结束,笔者立时同盟时不能够用逗号作为相配停止,只可以再加上下一行的 siblingList: ,但是那样的话就有空白符需求协作,所以须求增加空白相配符 s 。此时获得的多少最终为逗号,还不能够一向调换为 json 格式的多寡。那是本想着直接行使切成块([:-1])就可以去除逗号,不过事情并非这般的归纳,怎么都没想多逗号前边竟然还会有四个空格(此处请容许作者说句MMP)。今后在去分析,空白相配符 s 未有匹配到换行符,难道 siblingList: 前边还会有空格!!!
  2. 启用八线程时,连接数据库会生出叁个荒唐,此时就需求在连年数据库时增添参数connect=False
  3. 在分析页面时,某个页面不是大家供给的,无法深入分析到大家想要的结果。由此在实践下一步时就要求看清分析页面包车型大巴结果。

结果显示

在短短的几秒钟就下载了面对第六百货张图纸,效用还能的

澳门新浦京娱乐场网站 24

下载图片部分截图

澳门新浦京娱乐场网站 25

数据库内容部分截图

温馨提醒:运营程序前记得运转数据库

完全代码和出口文件请访谈:[https://github.com/xieys/python_spyder/tree/master/jiepai) 欢迎Follow和star

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站:妹子图爬虫,爬取天涯