国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

這篇具有很好參考價值的文章主要介紹了python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

scrapy框架

pipeline-itrm-shell

scrapy模擬登錄

scrapy下載圖片

下載中間件

scrapy框架

含義:

構(gòu)圖:python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?運行流程:1.scrapy框架拿到start_urls構(gòu)造了一個request請求

2.request請求發(fā)送給scrapy引擎,中途路過爬蟲中間件,引擎再發(fā)送request給調(diào)度器(一個隊列存儲request請求)

3.調(diào)度器再把requst請求發(fā)送給引擎

4.引擎再把requst請求發(fā)送給下載器,中途經(jīng)過下載中間件

5.下載器然后訪問互聯(lián)網(wǎng)然后返回response響應(yīng)

6.下載器把得到的response發(fā)送給引擎,中途經(jīng)過下載中間件

7.引擎發(fā)送resonse給爬蟲,中途路過爬蟲中間件

8.爬蟲通過response獲取數(shù)據(jù),(可以獲取url,....)如果還想再發(fā)請求,就再構(gòu)造一個request請求進行發(fā)送給引擎并再循環(huán)一次,如果不發(fā)請求,就把數(shù)據(jù)發(fā)送給引擎,中途路過爬蟲中間件

9.引擎把數(shù)據(jù)再發(fā)送給管道

10.管道進行保存

我們先來通過cmd頁板來創(chuàng)建項目吧

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

c:/d:/e:? --->切換網(wǎng)盤

cd 文件名稱 ----->切換進文件

scrapy ?startproject ?項目名稱 -------->創(chuàng)建項目

scrapy genspider 爬蟲文件名稱 ? ?域名? ? ?------->創(chuàng)建爬蟲文件

?scrapy crawl 爬蟲文件名稱? ? ? ------------>運行爬蟲文件

我們還可以創(chuàng)建start.py文件運行爬蟲文件(要創(chuàng)建在項目下的第一層)

文件的創(chuàng)建位置:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?代碼運行爬蟲文件:

from scrapy import cmdline

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

導(dǎo)入from? ?scrapy import cmdline

cmdline.execute([ 'scrapy',' crawl',' 爬蟲文件名稱' ]) :運行爬蟲文件

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

爬蟲名字.py文件

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?可以看出scrapy框架給出了一些類屬性,這些類屬性的值可以更改,但是def parse()是不能隨意更改名字和傳參的

settings.py文件

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?找到這個并打開,把注釋去掉,數(shù)值越小越先執(zhí)行,如果不打開就無法傳數(shù)據(jù)到pipelines.py文件里的

MyScrapyPipeline類中的process_item()中的item參數(shù)

下面我來演示,

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)

結(jié)果:python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?當我們點擊第一個網(wǎng)址是會跳轉(zhuǎn)到下面去

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?是因為爬蟲文件遵守了一個規(guī)則,解決方法如下:在settings.py文件找到如下的代碼:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?把True改為False,然后運行

結(jié)果:python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?可以看出減少了一個錯誤

但還是有錯誤,下面我們來解決一下:

解決403的方法有添加UA(header請求頭)

如圖找到這里:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?把My_scrapy (+http://www.yourdomain.com)這個更改為一個請求頭:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

結(jié)果:python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?可以正常訪問了

middlewares.py文件( 用于加請求頭)

但有些小可愛覺得這樣太麻煩了,如果是更換header請求頭很頻繁就很不好用,對于這個問題,我們可以想想,如果在發(fā)送請求的過程就加個請求頭是不是就不用這么麻煩了,那怎么加呢,

小可愛們可以想想,中間件這個是不是可以利用一下:

那我們就要找到中間件了,中間件在scrapy項目是一個middlewares.py文件

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?當我們打開這個文件是會看見:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?主要是這個文件把爬蟲中間件和下載中間件都寫在middlewares.py文件

MyScrapyDownloaderMiddleware 這個是下載中間件
MyScrapySpiderMiddleware 這個是爬蟲中間件

所以下面我來講解 MyScrapyDownloaderMiddleware

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?主要的還是這兩個比較常用,下面我們先來process_crawler

代碼截圖:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

當我們打印的時候會發(fā)現(xiàn),怎么沒有打印,為什么會這樣??原因是我們的中間件還未打開,下面我們舉要找到settings,py文件,并將其注釋去掉

代碼截圖:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?一運行成功了:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?那我們再來試試process_response

代碼截圖:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?結(jié)果:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生可以看出request 是在response前面的

可能一些小可愛又想到了一些情況,可不可以創(chuàng)建一個請求和響應(yīng)的呢

下面我們來試試

?代碼截圖:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?結(jié)果:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?細心的小可愛會發(fā)現(xiàn)和自己的預(yù)想不對,

下面我截取下載中間件來:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?這個就是問題所在

下面我來解釋一下下面的:

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()而是返回到引擎,引擎返回給調(diào)度器(原路返回)

# - or return a Response object
當return (一個Responset對象)時不會傳遞下去,比如duoban的process_request()?返回return (一個Response對象)就不會運行下載中間件的process_request()而是返回到引擎,引擎返回給爬蟲文件(跨級)

# - or raise IgnoreRequest: process_exception() methods of
如果這個?法拋出異常,則會調(diào)?process_exception?法 
#   installed downloader middleware will be called

process_response(request, response, spider)

# - return a Response object
返回Response對象:scrapy會繼續(xù)調(diào)?其他中間件的process_response?
法;
# - return a Request object
返回Request對象:停?中間器調(diào)?,將其放置到調(diào)度器待調(diào)度下載;
# - or raise IgnoreRequest
拋出IgnoreRequest異常:Request.errback會被調(diào)?來處理函數(shù),如果沒
有處理,它將會被忽略且不會寫進?志。

有些小可愛就會想,那我可不可以自己創(chuàng)建一個中間件用于添加請求頭:(要在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

結(jié)果python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?是可以運行的

pipelines.py文件

process_item(self, item, spider)

item:接收爬蟲文件返回過來的數(shù)據(jù),如字典

下面我們來爬取一下豆瓣吧

練習爬取豆瓣電影的圖片

爬蟲文件.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"
            }
            # 再發(fā)請求下載圖片
            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()
        # 第二種方法自己構(gòu)建
        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): # 當爬蟲開啟時調(diào)用
        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): # 每次傳參都會調(diào)用一次
        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文件:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?這個可以只輸出自己想輸出的內(nèi)容

_____________________________________

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?以上這些都有打開

記住如果爬蟲文件里發(fā)送請求失敗后就無法回調(diào)pipelines.py文件里的函數(shù)

暫停和恢復(fù)爬蟲的方法

有些小可愛覺得有沒有可以暫停和恢復(fù)爬蟲的方法?有的話那是啥

下面我來講講

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?scrapy crawl 爬蟲文件名字? -s JOBDIR=文件路徑(隨便定義)

Ctrl+c暫停爬蟲

當小可愛想再次恢復(fù)時會發(fā)現(xiàn)不能運行下載了,

原因是啥呢,因為我們寫的方法和框架給的不一樣,

scrapy.Request如下:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?dont_filte(不過濾嗎?)r是一個過濾,為False則過濾(相同的url只訪問一次),為True則不過濾

小可愛就會覺得那為啥parse()能發(fā)送,結(jié)果如下:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?結(jié)果就很明了了,如果要想不過濾,就得更改

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

如果你想過濾重寫方法:

python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?

scrapy模擬登錄

有兩種方法:

● 1 直接攜帶cookies請求??(半自動,用selenium獲取或者自己手動獲取cookie)

2 找接?發(fā)送post請求存儲cookie(發(fā)送賬號和密碼)
下面我用

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)

結(jié)果:python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

?爬蟲文件代碼實例二(在下載中間件文件添加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():
    #創(chuàng)建一個瀏覽器
    driver=webdriver.Chrome()
    #打開網(wǎng)頁
    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

找接?發(fā)送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


    #發(fā)送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):
        # 創(chuàng)建一個瀏覽器
        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")

以上就是這些內(nèi)容了.

總結(jié)

scrapy框架就是為了解決我們爬取許多數(shù)據(jù)而造成大量的代碼重寫,通過少數(shù)代碼解決問題文章來源地址http://www.zghlxwxcb.cn/news/detail-473745.html

到了這里,關(guān)于python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 分布式微服務(wù)項目實現(xiàn)高并發(fā)高可用高性能可以使用到的方案

    實力有限,只能就我知道的寫??偲粚懘笾路桨浮?不同于單機環(huán)境,分布式微服務(wù)環(huán)境下最大的問題就是會出現(xiàn)不僅是跨線程還會有跨服務(wù)的數(shù)據(jù)一致性問題。單機環(huán)境下我們有volatile和synchronized以及JUC下的并發(fā)編程工具等工具實現(xiàn)并發(fā)編程。分布式跨服務(wù)環(huán)境下就得使用

    2024年02月14日
    瀏覽(34)
  • 要在VMware(虛擬機)上獲取相機連接狀態(tài)并顯示在主界面上,您可以使用以下步驟:

    要在VMware(虛擬機)上獲取相機連接狀態(tài)并顯示在主界面上,您可以使用以下步驟:

    在VM上安裝相機驅(qū)動程序:確保VM中已安裝對應(yīng)的相機驅(qū)動程序,以便能夠連接和使用相機。 檢查相機連接狀態(tài):在VM中,打開設(shè)備管理器(Device Manager)并檢查相機是否顯示為已連接狀態(tài)。如果顯示為已連接,則表示相機已經(jīng)成功連接到VM。 創(chuàng)建主界面應(yīng)用程序(可選):如

    2024年02月05日
    瀏覽(22)
  • 【Verilog實現(xiàn)FPGA上的信號延遲】—— 用Verilog代碼實現(xiàn)將信號延遲N拍,這是FPGA中非常重要的一個操作,可以使數(shù)據(jù)在不同模塊之間精確同步。

    【Verilog實現(xiàn)FPGA上的信號延遲】—— 用Verilog代碼實現(xiàn)將信號延遲N拍,這是FPGA中非常重要的一個操作,可以使數(shù)據(jù)在不同模塊之間精確同步。 模塊是FPGA中最基本的構(gòu)建模塊。通常一個模塊代表一個電路,包括輸入、輸出和處理邏輯。模塊中包含的處理邏輯被稱為時序邏輯。

    2024年02月04日
    瀏覽(54)
  • Scrapy:Python中強大的網(wǎng)絡(luò)爬蟲框架

    Scrapy:Python中強大的網(wǎng)絡(luò)爬蟲框架

    在當今信息爆炸的時代,從互聯(lián)網(wǎng)上獲取數(shù)據(jù)已經(jīng)成為許多應(yīng)用程序的核心需求。Scrapy是一款基于Python的強大網(wǎng)絡(luò)爬蟲框架,它提供了一種靈活且高效的方式來提取、處理和存儲互聯(lián)網(wǎng)上的數(shù)據(jù)。本文將介紹Scrapy的主要特性和優(yōu)勢,以及如何使用它來構(gòu)建強大的網(wǎng)絡(luò)爬蟲。

    2024年02月19日
    瀏覽(23)
  • 【Python_Scrapy學(xué)習筆記(一)】Scrapy框架簡介

    【Python_Scrapy學(xué)習筆記(一)】Scrapy框架簡介

    Scrapy 框架是一個用 python 實現(xiàn)的為了爬取網(wǎng)站數(shù)據(jù)、提取數(shù)據(jù)的應(yīng)用框架,使用 Twisted 異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通訊,可以高效的完成數(shù)據(jù)爬取。本文主要介紹 Scrapy 框架的構(gòu)成與工作原理。 Windows安裝: -m -pip install Scrapy 或使用 PyCharm 可視化界面安裝。 爬蟲文件Spider:負責數(shù)

    2023年04月23日
    瀏覽(21)
  • python scrapy框架

    python scrapy框架

    Scrapy,Python開發(fā)的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試 最開始安裝了低版本 報錯 builtins.AttributeError: module \\\'OpenSSL.SSL\\\' has no attribute \\\'SSLv3_METHOD\\\' 升級到最新版本2.10.0

    2024年02月10日
    瀏覽(49)
  • 【python爬蟲】14.Scrapy框架講解

    【python爬蟲】14.Scrapy框架講解

    前兩關(guān),我們學(xué)習了能提升爬蟲速度的進階知識——協(xié)程,并且通過項目實操,將協(xié)程運用于抓取薄荷網(wǎng)的食物數(shù)據(jù)。 可能你在體驗開發(fā)一個爬蟲項目的完整流程時,會有這樣的感覺:原來要完成一個完整的爬蟲程序需要做這么多瑣碎的工作。 比如,要導(dǎo)入不同功能的模塊

    2024年02月09日
    瀏覽(18)
  • python爬蟲之Scrapy框架--保存圖片(詳解)

    python爬蟲之Scrapy框架--保存圖片(詳解)

    目錄 Scrapy 使用ImagePipeline 保存圖片 使用圖片管道? 具體步驟 安裝相關(guān)的依賴庫 創(chuàng)建Scrapy項目 配置settings.py? ?定義Item ?編寫Spider 運行Spider Scrapy 自定義ImagePipeline 自定義圖片管道 Scrapy提供了一個 ImagePipeline ,用來下載圖片這條管道,圖片管道 ImagesPipeline ?提供了方便并具有

    2024年02月11日
    瀏覽(16)
  • Python爬蟲開發(fā):Scrapy框架與Requests庫

    Python爬蟲開發(fā)中有兩個非常流行的工具:Scrapy框架和Requests庫。它們各自有自己的優(yōu)點和適用場景。 Scrapy Scrapy是一個為了爬取網(wǎng)站并提取結(jié)構(gòu)化數(shù)據(jù)而編寫的應(yīng)用框架,可以非常方便地實現(xiàn)網(wǎng)頁信息的抓取。Scrapy提供了多種可配置、可重用的組件,如調(diào)度器、下載器、爬蟲和

    2024年02月19日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包