Asyncpy使用文檔 Demo

      網友投稿 827 2022-05-29

      Asyncpy使用文檔

      1 創建項目

      2 發送get和post請求

      2.1 使用start_urls發送GET請求

      2.2 使用start_requests發送POST請求

      3 自定義請求頭

      3.1 settings中設置請求頭

      3.2 在middlewares中添加請求頭

      3.3 添加代理IP

      4 修改并發延時重試等配置

      4.1 修改settings中的配置

      4.2 修改指定爬蟲文件的配置

      5 生成日志文件

      5.1 修改settings配置

      5.2 多個爬蟲指定日志文件

      6 解析response提取數據

      6.1 response.text

      6.2 response.xpath('')

      6.3 response.css()、response.re()

      7 使用pipelines保存數據

      8 啟動多個爬蟲

      1 創建項目

      安裝需要的環境 python版本需要 >=3.6

      安裝命令:

      pip install asyncpy

      1

      安裝完成之后,可以開始創建一個爬蟲項目。

      創建項目命令:

      asyncpy genspider demo

      1

      創建一個名為demo的項目。

      創建成功之后, 打開項目文件,項目結構如下圖所示:

      2 發送get和post請求

      2.1 使用start_urls發送GET請求

      在start_url 列表中添加一個鏈接。

      在parse中,打印出響應狀態碼和內容。

      # -*- coding: utf-8 -*- from asyncpy.spider import Spider import settings class DemoSpider(Spider): name = 'demo' settings_attr = settings start_urls = ['http://httpbin.org/get'] async def parse(self, response): print(response.status) print(response.text) DemoSpider.start()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      右鍵點擊運行即可完成請求抓取。

      2.2 使用start_requests發送POST請求

      導入Asyncpy的Request模塊,清空start_urls ,然后重寫 start_requests方法完成Post請求。

      from asyncpy.spider import Spider import settings from asyncpy.spider import Request class DemoSpider(Spider): name = 'demo' settings_attr = settings start_urls = [] async def start_requests(self): url = 'http://httpbin.org/post' yield Request(callback=self.parse,url=url,method="POST",data={"Say":"Hello Asyncpy"}) async def parse(self, response): print(response.status) print(response.text) DemoSpider.start()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      響應結果:

      可以看到我們Post提交的參數。

      3 自定義請求頭

      這里以修改請求頭中的User-Agent為例子,從上面的圖中可以看出當前的User-Agent是aiohttp默認的用戶代理。

      3.1 settings中設置請求頭

      打開settings文件,找到最下面的 USER_AGENT 參數,解開注釋后,添加一個瀏覽器的UA。

      3.2 在middlewares中添加請求頭

      打開middlewares文件,找到UserAgentMiddleware方法(默認有),也可以自定義一個方法。

      # -*- coding: utf-8 -*- from asyncpy.middleware import Middleware from asyncpy.request import Request from asyncpy.spider import Spider middleware = Middleware() @middleware.request async def UserAgentMiddleware(spider:Spider, request: Request): ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36" request.headers.update({"User-Agent": ua})

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      然后到spider爬蟲文件中(demo.py),引入middlerwares文件中的 middleware 。 在start啟動方法中傳入middleware 。

      # -*- coding: utf-8 -*- from asyncpy.spider import Spider import settings from asyncpy.spider import Request from middlewares import middleware class DemoSpider(Spider): name = 'demo' settings_attr = settings start_urls = [] async def start_requests(self): url = 'http://httpbin.org/post' yield Request(callback=self.parse,url=url,method="POST",data={"Say":"Hello Asyncpy"}) async def parse(self, response): print(response.text) DemoSpider.start(middleware=middleware)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      運行demo.py,可以看到當前的 “User-Agent” 已經更改為我們自定義的UA。

      3.3 添加代理IP

      和3.1.1類似,打開middlewares文件,在方法下添加代理。(可以重新定義一個方法)

      注意是在aiohttp_kwargs中添加proxy。記得在start方法中傳入middleware。

      @middleware.request async def UserAgentMiddleware(spider:Spider, request: Request): ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36" request.headers.update({"User-Agent": ua}) request.aiohttp_kwargs.update({"proxy": "http://49.85.98.209:4253"})

      1

      2

      3

      4

      5

      運行demo.py,可以看到當前的 IP 已經更改為我們自定義的proxy。(該代理ip已過期)

      4 修改并發延時重試等配置

      4.1 修改settings中的配置

      settings文件中有以下可支持的配置,可以自己具體修改。

      """ CREATE YOUR DEFAULT_CONFIG ! Some configuration: CONCURRENT_REQUESTS 并發數量 RETRIES 重試次數 DOWNLOAD_DELAY 下載延時 RETRY_DELAY 重試延時 DOWNLOAD_TIMEOUT 超時限制 USER_AGENT 用戶代理 LOG_FILE 日志路徑 LOG_LEVEL 日志等級 """

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      4.2 修改指定爬蟲文件的配置

      如果需要對不同爬蟲文件進行不同的配置,可以使用 custom_settings 在爬蟲文件中自定義配置。

      并且需要在yield中,傳入custom_settings。才能使自定義配置生效。

      # -*- coding: utf-8 -*- from asyncpy.spider import Spider import settings from asyncpy.spider import Request from middlewares import middleware class DemoSpider(Spider): name = 'demo' settings_attr = settings custom_settings = { "DOWNLOAD_TIMEOUT":60, "RETRIES":3 } start_urls = [] async def start_requests(self): url = 'http://httpbin.org/post' yield Request(callback=self.parse,url=url, method="POST", data={"Say":"Hello Asyncpy"}, custom_settings=self.custom_settings ) async def parse(self, response): print(response.text) DemoSpider.start(middleware=middleware)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      Asyncpy使用文檔 Demo

      22

      23

      24

      25

      26

      27

      28

      29

      5 生成日志文件

      5.1 修改settings配置

      # '''生成日志文件''' # LOG_FILE = '../asyncpy.log' # LOG_LEVEL = 'DEBUG'

      1

      2

      3

      全局日志可以在settings文件中配置生成。

      5.2 多個爬蟲指定日志文件

      custom_settings = { "LOG_FILE" : "../asyncpy.log" }

      1

      2

      3

      這里跟上面相同,針對指定爬蟲文件的日志,需要刪除settings的日志配置,然后再通過custom_settings進行配置,如果不指定LOG_LEVEL 的話,日志等級默認為INFO

      6 解析response提取數據

      我引入了scrapy中的parsel解析模塊,所以這里默認的解析方法和scrapy相同。

      也可以自己選擇其他方法。

      async def parse(self, response): print(response.text) print(response.xpath('//text()')) print(response.css(''))

      1

      2

      3

      4

      6.1 response.text

      返回頁面文本內容,可以導入正則模塊進行匹配

      6.2 response.xpath(’’)

      getall() : 返回的是一個list,里面包含了多個string

      get() : 返回的是string,list里面第一個string

      extract() 等于 getall()

      extract_first() 等于 get()

      6.3 response.css()、response.re()

      parsel.css選擇器和parsel.re,可自行查找使用方法。

      7 使用pipelines保存數據

      使用回調方法,判斷yield的是否是dict類型的item,是則使用pipelines進行數據的保存處理。

      首先定義一個item,然后使用yield回調item。

      項目的pipelines文件中默認有SpiderPipeline類。導入SpiderPipeline,傳入start()啟動管道。

      # -*- coding: utf-8 -*- # 爬蟲文件 from asyncpy.spider import Spider import settings from asyncpy.spider import Request from middlewares import middleware from pipelines import SpiderPipeline class DemoSpider(Spider): name = 'demo' settings_attr = settings start_urls = [] async def start_requests(self): url = 'http://httpbin.org/post' yield Request(callback=self.parse,url=url, method="POST", data={"Say":"Hello Asyncpy"}, custom_settings=self.custom_settings ) async def parse(self, response): item = {} item['text'] = response.text yield item DemoSpider.start(middleware=middleware,pipelines=SpiderPipeline)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      # -*- coding: utf-8 -*- # pipelines文件 class SpiderPipeline(): def __init__(self): pass def process_item(self, item, spider_name): print(item)

      1

      2

      3

      4

      5

      6

      7

      8

      8 啟動多個爬蟲

      目前可以使用多進程的方式啟動多個爬蟲文件。

      創建一個test文件,導入兩個爬蟲文件的Spider,使用multiprocessing進行啟動。

      from Demo.demo import DemoSpider from Demo.demo2 import DemoSpider2 import multiprocessing def open_DemoSpider2(): DemoSpider2.start() def open_DemoSpider(): DemoSpider.start() if __name__ == "__main__": p1 = multiprocessing.Process(target = open_DemoSpider) p2 = multiprocessing.Process(target = open_DemoSpider2) p1.start() p2.start()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      感興趣的朋友或者留言吧,也可以去github點個star支持一下!

      鏈接 : https://github.com/lixi5338619/asyncpy

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Java案例:讀取XML文檔
      下一篇:《深度學習:主流框架和編程實戰》——1.5 深度學習展望
      相關文章
      亚洲成av人片在线看片| 亚洲一级特黄大片在线观看| 国产成人麻豆亚洲综合无码精品| 亚洲av乱码中文一区二区三区| 亚洲永久在线观看| 亚洲av乱码一区二区三区| 中文字幕亚洲综合久久2| 无码乱人伦一区二区亚洲| 久久精品亚洲中文字幕无码网站| 亚洲开心婷婷中文字幕| 亚洲线精品一区二区三区影音先锋 | 国产午夜亚洲不卡| 久久精品国产亚洲AV不卡| 亚洲伊人久久综合中文成人网| 亚洲日韩VA无码中文字幕| 亚洲伊人成无码综合网 | 亚洲首页在线观看| 亚洲精品在线播放| 亚洲成AV人综合在线观看| 亚洲狠狠ady亚洲精品大秀| 亚洲国产成人精品久久| 亚洲午夜国产精品无卡| 亚洲人成网站日本片| 久久亚洲国产成人影院| 亚洲精华国产精华精华液网站| 亚洲欧美综合精品成人导航| 亚洲暴爽av人人爽日日碰| 亚洲第一se情网站| 亚洲A∨精品一区二区三区| 亚洲国产人成精品| 国产亚洲精aa成人网站| 国精无码欧精品亚洲一区| 久久久无码精品亚洲日韩蜜桃| 麻豆亚洲av熟女国产一区二| 亚洲国产成AV人天堂无码| 亚洲综合久久精品无码色欲| 亚洲av色香蕉一区二区三区蜜桃| www.亚洲精品| 亚洲一区二区三区自拍公司| 久久久亚洲精品国产| 亚洲福利视频网站|