python的scrapy框架----->可以使我们更加强大,为打破写许多代码而生

2023-11-01

目录

scrapy框架

pipeline-itrm-shell

scrapy模拟登录

scrapy下载图片

下载中间件

scrapy框架

含义:

构图:

 运行流程:1.scrapy框架拿到start_urls构造了一个request请求

2.request请求发送给scrapy引擎,中途路过爬虫中间件,引擎再发送request给调度器(一个队列存储request请求)

3.调度器再把requst请求发送给引擎

4.引擎再把requst请求发送给下载器,中途经过下载中间件

5.下载器然后访问互联网然后返回response响应

6.下载器把得到的response发送给引擎,中途经过下载中间件

7.引擎发送resonse给爬虫,中途路过爬虫中间件

8.爬虫通过response获取数据,(可以获取url,....)如果还想再发请求,就再构造一个request请求进行发送给引擎并再循环一次,如果不发请求,就把数据发送给引擎,中途路过爬虫中间件

9.引擎把数据再发送给管道

10.管道进行保存

我们先来通过cmd页板来创建项目吧

c:/d:/e:  --->切换网盘

cd 文件名称 ----->切换进文件

scrapy  startproject  项目名称 -------->创建项目

scrapy genspider 爬虫文件名称    域名     ------->创建爬虫文件

 scrapy crawl 爬虫文件名称      ------------>运行爬虫文件

我们还可以创建start.py文件运行爬虫文件(要创建在项目下的第一层)

文件的创建位置:

 代码运行爬虫文件:

from scrapy import cmdline

# cmdline.execute("scrapy crawl baidu".split())
# cmdline.execute("scrapy crawl novel".split())
cmdline.execute("scrapy crawl shiping".split())

导入from   scrapy import cmdline

cmdline.execute([ 'scrapy',' crawl',' 爬虫文件名称' ]) :运行爬虫文件

下面我来分析一下里面的文件

爬虫名字.py文件

 可以看出scrapy框架给出了一些类属性,这些类属性的值可以更改,但是def parse()是不能随意更改名字和传参的

settings.py文件

 找到这个并打开,把注释去掉,数值越小越先执行,如果不打开就无法传数据到pipelines.py文件里的

MyScrapyPipeline类中的process_item()中的item参数

下面我来演示,

import scrapy


class BaiduSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/review/best/']

    def parse(self, response):
        print(response.text)

结果:

 当我们点击第一个网址是会跳转到下面去

 是因为爬虫文件遵守了一个规则,解决方法如下:在settings.py文件找到如下的代码:

 把True改为False,然后运行

结果:

 可以看出减少了一个错误

但还是有错误,下面我们来解决一下:

解决403的方法有添加UA(header请求头)

如图找到这里:

 把My_scrapy (+http://www.yourdomain.com)这个更改为一个请求头:

结果:

 可以正常访问了

middlewares.py文件( 用于加请求头)

但有些小可爱觉得这样太麻烦了,如果是更换header请求头很频繁就很不好用,对于这个问题,我们可以想想,如果在发送请求的过程就加个请求头是不是就不用这么麻烦了,那怎么加呢,

小可爱们可以想想,中间件这个是不是可以利用一下:

那我们就要找到中间件了,中间件在scrapy项目是一个middlewares.py文件

 当我们打开这个文件是会看见:

 主要是这个文件把爬虫中间件和下载中间件都写在middlewares.py文件

MyScrapyDownloaderMiddleware 这个是下载中间件
MyScrapySpiderMiddleware 这个是爬虫中间件

所以下面我来讲解 MyScrapyDownloaderMiddleware

 主要的还是这两个比较常用,下面我们先来process_crawler

代码截图:

当我们打印的时候会发现,怎么没有打印,为什么会这样? 原因是我们的中间件还未打开,下面我们举要找到settings,py文件,并将其注释去掉

代码截图:

 一运行成功了:

 那我们再来试试process_response

代码截图:

 结果:

可以看出request 是在response前面的

可能一些小可爱又想到了一些情况,可不可以创建一个请求和响应的呢

下面我们来试试

 代码截图:

 结果:

 细心的小可爱会发现和自己的预想不对,

下面我截取下载中间件来:

 这个就是问题所在

下面我来解释一下下面的:

process_request(request, spider)

# - return None: continue processing this request
当return None时就会传递下去,比如duoban的process_request() 返回return None就会运行下载中间件的process_request()

# - or return a Request object
当return (一个Request对象)时不会传递下去,比如duoban的process_request() 返回return (一个Request对象)就不会运行下载中间件的process_request()而是返回到引擎,引擎返回给调度器(原路返回)

# - or return a Response object
当return (一个Responset对象)时不会传递下去,比如duoban的process_request() 返回return (一个Response对象)就不会运行下载中间件的process_request()而是返回到引擎,引擎返回给爬虫文件(跨级)

# - or raise IgnoreRequest: process_exception() methods of
如果这个⽅法抛出异常,则会调⽤process_exception⽅法 
#   installed downloader middleware will be called

process_response(request, response, spider)

# - return a Response object
返回Response对象:scrapy会继续调⽤其他中间件的process_response⽅
法;
# - return a Request object
返回Request对象:停⽌中间器调⽤,将其放置到调度器待调度下载;
# - or raise IgnoreRequest
抛出IgnoreRequest异常:Request.errback会被调⽤来处理函数,如果没
有处理,它将会被忽略且不会写进⽇志。

有些小可爱就会想,那我可不可以自己创建一个中间件用于添加请求头:(要在middlewares.py文件)

from scrapy import signals
import random
class UsertMiddleware:
        User_Agent=["Mozilla/5.0 (compatible; MSIE 9.0; AOL 9.7; AOLBuild 4343.19; Windows NT 6.1; WOW64; Trident/5.0; FunWebProducts)",
                "Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.7; AOLBuild 4343.27; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"]

        def process_request(self, request, spider):
            # 添加请求头
            print(dir(request))
            request.headers["User-Agent"]=random.choice(self.User_Agent)
            # 添加代理ip
            # request.meta["proxies"]="代理ip"
            return None


class UafgfMiddleware:
    def process_response(self, request, response, spider):
        # 检测请求头是否添加上
        print(request.headers["User-Agent"])
        return response

结果

 是可以运行的

pipelines.py文件

process_item(self, item, spider)

item:接收爬虫文件返回过来的数据,如字典

下面我们来爬取一下豆瓣吧

练习爬取豆瓣电影的图片

爬虫文件.py:

import scrapy


class BaiduSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com','doubanio.com']
    start_urls = ['https://movie.douban.com/review/best/']
    a=1

    def parse(self, response):

        divs=response.xpath('//div[@id="content"]//div[@class="review-list chart "]//div[@class="main review-item"]')
        for div in divs:
            # print(div.extract)
            title=div.xpath('./a/img/@title')
            src=div.xpath('./a/img/@src')
            # print(title.extract_first())
            print(src.extract_first())
            yield {
                "title": title.extract_first(),
                "src": src.extract_first(),
                "type": "csv"
            }
            # 再发请求下载图片
            yield scrapy.Request(
                url=src.extract_first(),
                callback=self.parse_url,
                cb_kwargs={"imgg":title.extract_first()}
            )
        #第一种
        # next1=response.xpath(f'//div[@class="paginator"]//a[1]/@href').extract_first()
        # 第二种方法自己构建
        next1="/review/best?start={}".format(20*self.a)
        self.a+=1



        url11='https://movie.douban.com'+next1
        yield scrapy.Request(url=url11,callback=self.parse)
        print(url11)

    def parse_url(self,response,imgg):
        # print(response.body)

        yield {
            "title":imgg,
            "ts":response.body,
            "type":"img"
        }

pipelines.py文件:

import csv


class MyScrapyPipeline:
    def open_spider(self,spider): # 当爬虫开启时调用
        header = ["title", "src"]
        self.f = open("move.csv", "a", encoding="utf-8")
        self.wri_t=csv.DictWriter(self.f,header)
        self.wri_t.writeheader()

    def process_item(self, item, spider): # 每次传参都会调用一次
        if item.get("type")=="csv":
            item.pop("type")
            self.wri_t.writerow(item)
        if item.get("type")=="img":
            item.pop("type")
            with open("./图片/{}.png".format(item.get("title")),"wb")as f:
                f.write(item.get("ts"))
                print("{}.png下载完毕".format(item.get("title")))

        return item

    def close_spider(self,spider):
        self.f.close()

settings.py文件:

 

 这个可以只输出自己想输出的内容

_____________________________________

 

 

 以上这些都有打开

记住如果爬虫文件里发送请求失败后就无法回调pipelines.py文件里的函数

暂停和恢复爬虫的方法

有些小可爱觉得有没有可以暂停和恢复爬虫的方法?有的话那是啥

下面我来讲讲

 scrapy crawl 爬虫文件名字  -s JOBDIR=文件路径(随便定义)

Ctrl+c暂停爬虫

当小可爱想再次恢复时会发现不能运行下载了,

原因是啥呢,因为我们写的方法和框架给的不一样,

scrapy.Request如下:

 dont_filte(不过滤吗?)r是一个过滤,为False则过滤(相同的url只访问一次),为True则不过滤

小可爱就会觉得那为啥parse()能发送,结果如下:

 结果就很明了了,如果要想不过滤,就得更改

如果你想过滤重写方法:

 

scrapy模拟登录

有两种方法:

● 1 直接携带cookies请求⻚⾯(半自动,用selenium获取或者自己手动获取cookie)

2 找接⼝发送post请求存储cookie(发送账号和密码)
下面我用

https://www.1905.com/vod/list/c_178/o3u1p1.html来做个案例

第一种方法之手动登录获取之请求页面

爬虫文件代码实例一(在爬虫文件添加cookie);

import scrapy


class A17kSpider(scrapy.Spider):
    name = '17k'
    allowed_domains = ['17k.com']
    start_urls = ['https://www.17k.com/']

    # 重写
    def start_requests(self):
        cook="GUID=f0f80f5e-fb00-443f-a6be-38c6ce3d4c61; __bid_n=1883d51d69d6577cf44207; BAIDU_SSP_lcr=https://www.baidu.com/link?url=v-ynoaTMtiyBil1uTWfIiCbXMGVZKqm4MOt5_xZD0q7&wd=&eqid=da8d6ae20003f26f00000006647c3209; Hm_lvt_9793f42b498361373512340937deb2a0=1684655954,1684929837,1685860878; dfxafjs=js/dfxaf3-ef0075bd.js; FPTOKEN=zLc3s/mq2pguVT/CfivS7tOMcBA63ZrOyecsnTPMLcC/fBEIx0PuIlU5HgkDa8ETJkZYoDJOSFkTHaz1w8sSFlmsRLKFG8s+GO+kqSXuTBgG98q9LQ+EJfeSHMvwMcXHd+EzQzhAxj1L9EnJuEV2pN0w7jUCYmfORSbIqRtu5kruBMV58TagSkmIywEluK5JC6FnxCXUO0ErYyN/7awzxZqyqrFaOaVWZZbYUrhCFq0N8OQ1NMPDvUNvXNDjDOLM6AU9f+eHsXFeAaE9QunHk6DLbxOb8xHIDot4Pau4MNllrBv8cHFtm2U3PHX4f6HFkEpfZXB0yVrzbX1+oGoscbt+195MLZu478g3IFYqkrB8b42ILL4iPHtj6M/MUbPcxoD25cMZiDI1R0TSYNmRIA==|U8iJ37fGc7sL3FohNPBpgau0+kHrBi2OlH2bHfhFOPQ=|10|87db5f81d4152bd8bebb5007a0f3dbc3; c_channel=0; c_csc=web; accessToken=avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F03%252F43%252F75%252F100257543.jpg-88x88%253Fv%253D1685860834000%26id%3D100257543%26nickname%3D%25E8%2580%2581%25E5%25A4%25A7%25E5%2592%258C%25E5%258F%258D%25E5%25AF%25B9%25E6%25B3%2595%25E7%259A%2584%25E5%258F%258D%26e%3D1701413546%26s%3Db67793dfa5cea859; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100257543%22%2C%22%24device_id%22%3A%221883d51d52d1790-08af8c489ac963-26031a51-1638720-1883d51d52eea0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Flink%22%2C%22%24latest_referrer_host%22%3A%22www.baidu.com%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%2C%22first_id%22%3A%22f0f80f5e-fb00-443f-a6be-38c6ce3d4c61%22%7D; Hm_lpvt_9793f42b498361373512340937deb2a0=1685861547"
        yield scrapy.Request(
            url=self.start_urls[0],
            callback=self.parse,
            cookies={lis.split("=")[0]:lis.split("=")[1] for lis in cook.split(";")}
        )

    def parse(self, response):
        # print(response.text)
        yield scrapy.Request(url="https://user.17k.com/www/",callback=self.parse_url)

    def parse_url(self,response):
        print(response.text)

结果:

 爬虫文件代码实例二(在下载中间件文件添加cookie);

class MyaddcookieMiddleware:
    def process_request(self, request, spider):
        cook = "GUID=f0f80f5e-fb00-443f-a6be-38c6ce3d4c61; __bid_n=1883d51d69d6577cf44207; BAIDU_SSP_lcr=https://www.baidu.com/link?url=v-ynoaTMtiyBil1uTWfIiCbXMGVZKqm4MOt5_xZD0q7&wd=&eqid=da8d6ae20003f26f00000006647c3209; Hm_lvt_9793f42b498361373512340937deb2a0=1684655954,1684929837,1685860878; dfxafjs=js/dfxaf3-ef0075bd.js; FPTOKEN=zLc3s/mq2pguVT/CfivS7tOMcBA63ZrOyecsnTPMLcC/fBEIx0PuIlU5HgkDa8ETJkZYoDJOSFkTHaz1w8sSFlmsRLKFG8s+GO+kqSXuTBgG98q9LQ+EJfeSHMvwMcXHd+EzQzhAxj1L9EnJuEV2pN0w7jUCYmfORSbIqRtu5kruBMV58TagSkmIywEluK5JC6FnxCXUO0ErYyN/7awzxZqyqrFaOaVWZZbYUrhCFq0N8OQ1NMPDvUNvXNDjDOLM6AU9f+eHsXFeAaE9QunHk6DLbxOb8xHIDot4Pau4MNllrBv8cHFtm2U3PHX4f6HFkEpfZXB0yVrzbX1+oGoscbt+195MLZu478g3IFYqkrB8b42ILL4iPHtj6M/MUbPcxoD25cMZiDI1R0TSYNmRIA==|U8iJ37fGc7sL3FohNPBpgau0+kHrBi2OlH2bHfhFOPQ=|10|87db5f81d4152bd8bebb5007a0f3dbc3; c_channel=0; c_csc=web; accessToken=avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F03%252F43%252F75%252F100257543.jpg-88x88%253Fv%253D1685860834000%26id%3D100257543%26nickname%3D%25E8%2580%2581%25E5%25A4%25A7%25E5%2592%258C%25E5%258F%258D%25E5%25AF%25B9%25E6%25B3%2595%25E7%259A%2584%25E5%258F%258D%26e%3D1701413546%26s%3Db67793dfa5cea859; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100257543%22%2C%22%24device_id%22%3A%221883d51d52d1790-08af8c489ac963-26031a51-1638720-1883d51d52eea0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Flink%22%2C%22%24latest_referrer_host%22%3A%22www.baidu.com%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%2C%22first_id%22%3A%22f0f80f5e-fb00-443f-a6be-38c6ce3d4c61%22%7D; Hm_lpvt_9793f42b498361373512340937deb2a0=1685861547"
        cookies = {lis.split("=")[0]: lis.split("=")[1] for lis in cook.split(";")}
        request.cookies=cookies
        return None

 爬虫文件代码实例三(在下载中间件文件添加cookie);

def sele():
    #创建一个浏览器
    driver=webdriver.Chrome()
    #打开网页
    driver.get("https://user.17k.com/www/bookshelf/")
    print("你有15秒的时间登入")
    time.sleep(15)
    print(driver.get_cookies())
    print({i.get("name"):i.get("value") for i in driver.get_cookies()})





class MyaddcookieMiddleware:


    def process_request(self, request, spider):
        sele()
        return None

找接⼝发送post请求存储cookie

代码1:

import scrapy


class A17kSpider(scrapy.Spider):
    name = '17k'
    allowed_domains = ['17k.com']
    start_urls = ['https://www.17k.com/']

    # # 重写
    # def start_requests(self):
    #     cook="GUID=f0f80f5e-fb00-443f-a6be-38c6ce3d4c61; __bid_n=1883d51d69d6577cf44207; BAIDU_SSP_lcr=https://www.baidu.com/link?url=v-ynoaTMtiyBil1uTWfIiCbXMGVZKqm4MOt5_xZD0q7&wd=&eqid=da8d6ae20003f26f00000006647c3209; Hm_lvt_9793f42b498361373512340937deb2a0=1684655954,1684929837,1685860878; dfxafjs=js/dfxaf3-ef0075bd.js; FPTOKEN=zLc3s/mq2pguVT/CfivS7tOMcBA63ZrOyecsnTPMLcC/fBEIx0PuIlU5HgkDa8ETJkZYoDJOSFkTHaz1w8sSFlmsRLKFG8s+GO+kqSXuTBgG98q9LQ+EJfeSHMvwMcXHd+EzQzhAxj1L9EnJuEV2pN0w7jUCYmfORSbIqRtu5kruBMV58TagSkmIywEluK5JC6FnxCXUO0ErYyN/7awzxZqyqrFaOaVWZZbYUrhCFq0N8OQ1NMPDvUNvXNDjDOLM6AU9f+eHsXFeAaE9QunHk6DLbxOb8xHIDot4Pau4MNllrBv8cHFtm2U3PHX4f6HFkEpfZXB0yVrzbX1+oGoscbt+195MLZu478g3IFYqkrB8b42ILL4iPHtj6M/MUbPcxoD25cMZiDI1R0TSYNmRIA==|U8iJ37fGc7sL3FohNPBpgau0+kHrBi2OlH2bHfhFOPQ=|10|87db5f81d4152bd8bebb5007a0f3dbc3; c_channel=0; c_csc=web; accessToken=avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F03%252F43%252F75%252F100257543.jpg-88x88%253Fv%253D1685860834000%26id%3D100257543%26nickname%3D%25E8%2580%2581%25E5%25A4%25A7%25E5%2592%258C%25E5%258F%258D%25E5%25AF%25B9%25E6%25B3%2595%25E7%259A%2584%25E5%258F%258D%26e%3D1701413546%26s%3Db67793dfa5cea859; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100257543%22%2C%22%24device_id%22%3A%221883d51d52d1790-08af8c489ac963-26031a51-1638720-1883d51d52eea0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Flink%22%2C%22%24latest_referrer_host%22%3A%22www.baidu.com%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%2C%22first_id%22%3A%22f0f80f5e-fb00-443f-a6be-38c6ce3d4c61%22%7D; Hm_lpvt_9793f42b498361373512340937deb2a0=1685861547"
    #     yield scrapy.Request(
    #         url=self.start_urls[0],
    #         callback=self.parse,
    #         cookies={lis.split("=")[0]:lis.split("=")[1] for lis in cook.split(";")}
    #     )
    #
    # def parse(self, response):
    #     # print(response.text)
    #     # yield scrapy.Request(url="https://user.17k.com/www/bookshelf/",callback=self.parse_url)
    #     pass
    # def parse_url(self,response):
    #
    #     # print(response.text)
    #     pass


    #发送post请求
    def parse(self, response):
        data={
    "loginName": "15278307585",
    "password": "wasd1234"
}
        yield scrapy.FormRequest(
            url="https://passport.17k.com/ck/user/login",
            callback=self.prase_url,
            formdata=data
                                 )

        #适用于该页面有form表单
        # yield scrapy.FormRequest.from_response(response,formdata=data,callback=self.start_urls)


    def prase_url(self,response):
        print(response.text)

除了这些还可以通过下载中间件返回respose对象来

from scrapy import signals
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
from scrapy.http.response.html import HtmlResponse
lass MyaaacookieMiddleware:
    def process_request(self, request, spider):
        # 创建一个浏览器
        driver=webdriver.Chrome()
        # 打开浏览器
        driver.get("https://juejin.cn/")
        driver.implicitly_wait(3)
        # js语句下拉
        for i in range(3):
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
            time.sleep(3)
        html=driver.page_source
        return HtmlResponse(url=driver.current_url,body=html,request=request,encoding="utf-8")

以上就是这些内容了.

总结

scrapy框架就是为了解决我们爬取许多数据而造成大量的代码重写,通过少数代码解决问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的scrapy框架----->可以使我们更加强大,为打破写许多代码而生 的相关文章

  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp

随机推荐

  • TIDB简介及TIDB部署、原理和使用介绍

    TiDB简介及TiDB部署 原理和使用介绍 从MySQL架构到TiDB 数据库分类 介绍TiDB数据库之前 先引入使用场景 如今的数据库种类繁多 RDBMS 关系型数据库 NoSQL Not Only SQL NewSQL 在数据库领域均有
  • 从“火热”到“退烧”,付费自习室将何去何从?

    近几年随着考编 考研大军的人数爆炸式增长 国内付费自习室也愈加火热 逐渐开始替代图书馆 咖啡厅等传统自习室 成为备考人群的新选择 2019年 国内第一家付费自习室在北京成立 此后 付费自习室数量大幅上升 掀起一股热潮 据新华网报道 仅仅这一
  • Clickhouse创建用户

    clickhouse创建用户 clickhouse创建新用户并配置权限 需要修改配置文件users xml 其中 要配置的内容包括 1 用户名 设为test 2 密码 需事先确定好 并用sha256加密 3 可访问的数据库 设为test 具
  • 强化学习PPO:Proximal Policy Optimization Algorithms解读

    PPO算法是一类Policy Gradient强化学习方法 经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作 其参数更新是通过下式进行的 用于衡量决策模型的优劣目标 决策模型的优化目标为寻找最优决策 使得该决策下
  • 物联网开发103 - Micropython ESP32用增强固件驱动st7735s显示屏显示日期时钟和汉字

    一 目的 这一节我们来学习如何使用SP32使用加强版本的固件 加载中文字库 驱动st7735显示屏来显示汉字 二 环境 ESP32开发板 MicroPython v1 15 13 g530c76f6c dirty on 2021 04 30
  • websocket握手失败_探讨Netty获取并检查Websocket握手请求的两种方式

    在使用Netty开发Websocket服务时 通常需要解析来自客户端请求的URL Headers等等相关内容 并做相关检查或处理 本文将讨论两种实现方法 方法一 基于HandshakeComplete自定义事件 特点 使用简单 校验在握手成
  • visual studio:安装visual studio 2019后发现MSVC v140-VS 2015 C++安装位置出错删除办法

    安装visual studio 2019发现vs140安装位置默认安装在D Program Files x86 然后安装vs2015发现安装位置被定死了怎么办 打开visual studio 2019的安装程序 gt 修改 gt 右侧 使用
  • mysqldump常用备份恢复方法

    mysqldump常用备份恢复方法 2015 04 24 14 28 33 mysqldump常用备份恢复方法 一 使用mysqldump对数据库进行备份 1 全备份单库 语法 mysqldump h主机名 P端口 u用户名 p密码 数据库
  • 中职网络安全2022国赛之隐写术应用

    简介 有什么不会的可以来问我 3316735898 需要题目 解题工具和脚本的也可以来找我 1 找出文件夹1中的文件 将文件中的隐藏信息作为Flag值提交 打开文件 将文件放入kali 查询文件内部是否有其他文件 binwalk final
  • upload-labs(还没做完)

    参考资料 pass 1 前端验证 这题前端验证 直接把js禁了就行 上传zoe php 成功 pass 2 MIME绕过 支持jpeg png gif类型 那就bp抓包该类型 pass 3 特殊后缀名绕过 没有禁特殊后缀名 那就用php3
  • 最全iOS12捷径库收集整理,iOS12捷径推荐

    收集整理一波iOS12的捷径库 使用方法见文末 大家使用过程中如果发现有啥问题或者想实现什么捷径 可以关注微信公众号 云峰小罗 找到我 1 抖音视频无水印下载 2 清除照片位置信息 3 获取热门新闻 4 照片拼图 5 录制音频笔记至印象笔记
  • Unity Image 适配 text 类似-父适配儿

    Unity Image 适配 text 类似 父适配儿
  • 在GNS3上模拟出虚拟私有网络(GRE与IPsec)

    GRE 实验背景 R1 R5为两间私有公司 R2 R4分别为该公司的边界路由器 R3为internet 现配置GRE协议 实现R1能够访问R5内网 实验拓扑 实验步骤 1 配置网络底层 R1 R5配置 以R1为例 R2 R4边界路由器的配置
  • 【C语言】消息队列

    C queue 读取消息队列代码 消息队列 写 代码 读取消息队列代码 include
  • Redis:性能风险之CPU核和NUMA架构的影响

    文章目录 关于作者 1 主流CPU架构 2 CPU多核对Redis的性能影响 3 CPU的NUMA架构对Redis的性能影响 3 1 NUMA架构 3 2 NUMA架构对Redis的影响 3 3 绑核所带来的风险及解决办法 关于作者 关于作
  • Apache commons-dbutils工具简介说明

    转自 Apache commons dbutils工具简介说明 下文笔者讲述Apache commons dbutils工具简介说明 如下所示 commons dbutils简介 commons dbutils 是Apache提供的一个开源
  • Java 稀疏数组:利用IO流实现存盘与续上盘功能

    尚硅谷数据结构教程中 稀疏数组的课后练习 中途因为写入save data文件的数字和读取出来的数字不同 让我费劲心神 最后被一个学长一下子点出来 顿然醒悟 以下是源码 import java io FileReader import jav
  • Python3中.pyi文件介绍

    在看PyTorch代码时 在一些模块中经常会发现 pyi文件 如下图所示 是PyTorch中torch optim模块中的 pyi文件 每种实现优化算法的 py文件 都有一个对应的 pyi文件 每个 pyi文件中的内容都相似 仅有类的 in
  • 词法分析之Bi-LSTM-CRF框架

    词法分析是NLP的一项重要的基础技术 包括分词 词性标注 实体识别等 其主要算法结构为基于Bi LSTM CRF算法体系 下面对Bi LSTM CRF算法体系进行介绍 引言 首先抛开深层的技术原因 来从宏观上看一下为什么LSTM Bi LS
  • python的scrapy框架----->可以使我们更加强大,为打破写许多代码而生

    目录 scrapy框架 pipeline itrm shell scrapy模拟登录 scrapy下载图片 下载中间件 scrapy框架 含义 构图 运行流程 1 scrapy框架拿到start urls构造了一个request请求 2 r