# Request ## ç®ä» Request为feapderçä¸è½½å¨ï¼åºäºrequestsè¿è¡äºå°è£ ï¼å æ¤æ¯ærequestsçææåæ° æä»¬å¯ä»¥ç´æ¥è°ç¨æ¡æ¶ä¸çRequestå起请æ±ï¼ä½¿ç¨ç¤ºä¾ï¼ ``` from feapder import Request request = Request("https://www.baidu.com", data={}, params=None) response = request.get_response() print(response) ``` è¿åçresponseæ¯æxpathãcssç表达å¼ï¼å ·ä½ç¨æ³è§[Response](source_code/Response) Requesté¤äºæ¯ærequestsçææåæ°å¤ï¼æ´éè¦å ³å¿çæ¯æ¡æ¶ä¸æ¯æçåæ° ## åæ°è¯¦è§£ ```python @summary: Requeståæ° --------- æ¡æ¶åæ° @param url: å¾ æåurl @param retry_times: å½åéè¯æ¬¡æ° @param priority: 请æ±ä¼å 级 è¶å°è¶ä¼å é»è®¤300 @param parser_name: åè°å½æ°æå¨çç±»å é»è®¤ä¸ºå½åç±» @param callback: åè°å½æ° å¯ä»¥æ¯å½æ° ä¹å¯æ¯å½æ°åï¼å¦æ³è·¨ç±»åè°æ¶ï¼parser_nameæå®é£ä¸ªç±»åï¼callbackæå®é£ä¸ªç±»æ³åè°çæ¹æ³åå³å¯ï¼ @param filter_repeat: æ¯å¦éè¦å»é (True/False) å½settingä¸çREQUEST_FILTER_ENABLE设置为Trueæ¶è¯¥åæ°çæ é»è®¤True @param auto_request: æ¯å¦éè¦èªå¨è¯·æ±ä¸è½½ç½é¡µ é»è®¤æ¯ã设置为Falseæ¶è¿åçresponse为空ï¼éè¦èªå·±å»è¯·æ±ç½é¡µ @param request_sync: æ¯å¦åæ¥è¯·æ±ä¸è½½ç½é¡µï¼é»è®¤å¼æ¥ãå¦æè¯¥è¯·æ±urlè¿ææ¶é´å¿«ï¼å¯è®¾ç½®ä¸ºTrueï¼ç¸å½äºyieldçreqeustä¼ç«å³ååºï¼è䏿¯å»æé @param use_session: æ¯å¦ä½¿ç¨sessionæ¹å¼ @param random_user_agent: æ¯å¦éæºUser-Agent (True/False) å½settingä¸çRANDOM_HEADERS设置为Trueæ¶è¯¥åæ°çæ é»è®¤True @param download_midware: ä¸è½½ä¸é´ä»¶ãé»è®¤ä¸ºparserä¸çdownload_midware @param is_abandoned: å½åçå¼å¸¸æ¶æ¯å¦æ¾å¼éè¯ True/False. é»è®¤False @param render: æ¯å¦ç¨æµè§å¨æ¸²æ @param render_time: æ¸²ææ¶é¿ï¼å³æå¼ç½é¡µçå¾ æå®æ¶é´ååè·åæºç -- 以ä¸åæ°äºrequestsåæ°ä½¿ç¨æ¹å¼ä¸è´ @param method: è¯·æ±æ¹å¼ï¼å¦POSTæGETï¼é»è®¤æ ¹æ®data弿¯å¦ä¸ºç©ºæ¥å¤æ @param params: 请æ±åæ° @param data: 请æ±body @param json: 请æ±jsonå符串ï¼å json.dumps(data) @param headers: @param cookies: åå ¸ æ CookieJar 对象 @param files: @param auth: @param timeout: (æµ®ç¹æå ç»)çå¾ æå¡å¨æ°æ®çè¶ æ¶éå¶ï¼æ¯ä¸ä¸ªæµ®ç¹æ°ï¼ææ¯ä¸ä¸ª(connect timeout, read timeout) å ç» @param allow_redirects : Boolean. True 表示å 许è·è¸ª POST/PUT/DELETE æ¹æ³çéå®å @param proxies: 代ç {"http":"http://xxx", "https":"https://xxx"} @param verify: 为 True æ¶å°ä¼éªè¯ SSL è¯ä¹¦ @param stream: å¦æä¸º Falseï¼å°ä¼ç«å³ä¸è½½ååºå 容 @param cert: -- @param **kwargs: å ¶ä»å¼: å¦ Request(item=item) åitemå¯ç´æ¥ç¨ request.item ååº --------- ``` 举ä¾è¯´æï¼å¦ææä»¬ä¸æ³ç¨å ç½®çä¸è½½å¨ï¼åæ³å¦ä¸ï¼ def start_requests(self): yield feapder.Request("https://www.baidu.com", auto_request=False) def parse(self, request, response): # response 为Noneï¼ éè¦èªå·±å»ä¸è½½ pass ## æ¹æ³è¯¦è§£ ### 1. å起请æ±ï¼è·åååº ``` def get_response(self, save_cached=False): """ è·å带æselectoråè½çresponse @param save_cached: ä¿åç¼å æ¹ä¾¿è°è¯æ¶ä¸ç¨æ¯æ¬¡é½éæ°ä¸è½½ @return: """ ``` save_cached åæ°ç¨äºè®¾ç½®æ¯å¦æååºç¼åå°redisï¼è¥ä¸ºTrue, éè¦é ç½®redisè¿æ¥ä¿¡æ¯ãredisè¿æ¥ä¿¡æ¯ä¼è¯»åsetting.pyæä»¶ï¼æä»¥éè¦ä¿è¯å·¥ä½åºé´ä¸æsetting.pyã æè å¯ä»¥å°è¿æ¥ä¿¡æ¯è®¾ç½®ä¸ºç¯å¢åé 以macçµèä¸ºä¾ ``` > vim ~/.bash_profile export REDISDB_IP_PORTS='ip:port' # å¤ä¸ªå°åç¨éå·éå¼ export REDISDB_USER_PASS='xxx' export REDISDB_DB='xxx' # é»è®¤æ¯0, å¯ä¸è®¾ç½® export REDISDB_SERVICE_NAME='xxx' # ç¨äºredisçå¨å µæ¨¡å¼ï¼åèç¹æé群模å¼å¯ä¸è®¾ç½® ``` è¿æ ·ï¼å½æ¡æ¶è¯»åä¸å°settingæ¶ï¼ä¾¿ä¼åç¯å¢åééçå¼ ### 2. ä»ç¼åä¸åååº ``` def get_response_from_cached(self, save_cached=True): pass ``` ç¨äºä»ä¸é¢çç¼åä¸åresponseãå½ç¼åä¸å卿¶ï¼ä¼å ä¸è½½ï¼ç¶åå°ååºåå ¥ç¼åï¼ä¹ååè¿åååºãç¼ååæ ·ä¾èµredisï¼å æ¤éè¦å é 置好redisè¿æ¥ä¿¡æ¯ ### 3. å é¤ç¼å ``` def del_response_cached(self) pass ``` ### 4. å¤å¶Request ``` def copy(self): pass ``` ## ç¼åæºå¶ ### 1. ç¼åæææ ç¼å使ç¨redisçstrç»æåå¨ï¼æ¯æ¡ç¼å对åºä¸ä¸ªkeyï¼é»è®¤æææ20åéï¼å¯ä»¥éè¿ `Request.cached_expire_time=è¿ææ¶é´`æ¥è®¾ç½® ### 2. ç¼åkey é»è®¤çkey为 `response_cached:test:requestæçº¹` å¯éè¿`Request.cached_redis_key`设置ï¼è®¾ç½®å为 `response_cached:èªå®ä¹çkey:requestæçº¹` ## 代çåUserAgent 代çåUAç设置ä¼å åä¼ éçåæ°ï¼è¥åæ°æ²¡æå®ï¼åä¾èµ`setting.py`çé ç½®ï¼é»è®¤å¦ä¸ï¼ ```python # 设置代ç PROXY_EXTRACT_API = None # 代çæåAPI ï¼è¿åç代çåå²ç¬¦ä¸º\r\n PROXY_ENABLE = True # éæºheaders RANDOM_HEADERS = True # requests 使ç¨session USE_SESSION = False ``` PROXY_EXTRACT_API 为代ççæåå°åï¼å¦ ```python PROXY_EXTRACT_API="http://xxxx" ``` è¿åçä»£çæ ¼å¼ä¸ºï¼ ``` ip:port ip:port ip:port ```