爬蟲主程序:
#-*-coding:utf-8-*-importscrapyfromscrapy.httpimportRequestfromzjf.FsmzItemsimportFsmzItemfromscrapy.selectorimportSelector#圈圈:情感生活classMySpider(scrapy.Spider):#爬蟲名name="MySpider"#設定域名allowed_domains=["nvsheng.com"]#爬取地址start_urls=[]#flagx=0#爬取方法defparse(self,response):item=FsmzItem()sel=Selector(response)item['title']=sel.xpath('//h2/text()').extract()item['text']=sel.xpath('//*[@class="content"]/p/text()').extract()item['imags']=sel.xpath('//p[@id="content"]/p/a/img/@src|//p[@id="content"]/p/img/@src').extract()ifMySpider.x==0:page_list=MySpider.getUrl(self,response)forpage_singleinpage_list:yieldRequest(page_single)MySpider.x+=1yielditem#init:動態傳入參數#命令行傳參寫法:scrapycrawlMySpider-astart_url="http://some_url"def__init__(self,*args,**kwargs):super(MySpider,self).__init__(*args,**kwargs)self.start_urls=[kwargs.get('start_url')]defgetUrl(self,response):url_list=[]select=Selector(response)page_list_tmp=select.xpath('//p[@class="viewnewpages"]/a[not(@class="next")]/@href').extract()forpage_tmpinpage_list_tmp:ifpage_tmpnotinurl_list:url_list.append("http://www.nvsheng.com/emotion/px/"+page_tmp)returnurl_list
PipeLines類
#-*-coding:utf-8-*-#Defineyouritempipelineshere##Don'tforgettoaddyourpipelinetotheITEM_PIPELINESsetting#See:http://doc.scrapy.org/en/latest/topics/item-pipeline.htmlfromzjfimportsettingsimportjson,os,re,randomimporturllib.requestimportrequests,jsonfromrequests_toolbelt.multipart.encoderimportMultipartEncoderclassMyPipeline(object):flag=1post_title=''post_text=[]post_text_imageUrl_list=[]cs=[]user_id=''def__init__(self):MyPipeline.user_id=MyPipeline.getRandomUser('37619,18441390,18441391')#processthedatadefprocess_item(self,item,spider):#獲取隨機user_id,模擬發帖user_id=MyPipeline.user_id#獲取正文text_str_tmptext=item['text']text_str_tmp=""forstrintext:text_str_tmp=text_str_tmp+str#print(text_str_tmp)#獲取標題ifMyPipeline.flag==1:title=item['title']MyPipeline.post_title=MyPipeline.post_title+title[0]#保存并上傳圖片text_insert_pic=''text_insert_pic_w=''text_insert_pic_h=''forimag_urlinitem['imags']:img_name=imag_url.replace('/','').replace('.','').replace('|','').replace(':','')pic_dir=settings.IMAGES_STORE+'%s.jpg'%(img_name)urllib.request.urlretrieve(imag_url,pic_dir)#圖片上傳,返回jsonupload_img_result=MyPipeline.uploadImage(pic_dir,'image/jpeg')#獲取json中保存圖片路徑text_insert_pic=upload_img_result['result']['image_url']text_insert_pic_w=upload_img_result['result']['w']text_insert_pic_h=upload_img_result['result']['h']#拼接jsonifMyPipeline.flag==1:cs_json={"c":text_str_tmp,"i":"","w":text_insert_pic_w,"h":text_insert_pic_h}else:cs_json={"c":text_str_tmp,"i":text_insert_pic,"w":text_insert_pic_w,"h":text_insert_pic_h}MyPipeline.cs.append(cs_json)MyPipeline.flag+=1returnitem#spider開啟時被調用defopen_spider(self,spider):pass#sipder關閉時被調用defclose_spider(self,spider):strcs=json.dumps(MyPipeline.cs)jsonData={"apisign":"99ea3eda4b45549162c4a741d58baa60","user_id":MyPipeline.user_id,"gid":30,"t":MyPipeline.post_title,"cs":strcs}MyPipeline.uploadPost(jsonData)#上傳圖片defuploadImage(img_path,content_type):"uploadImagefunctions"#UPLOAD_IMG_URL="http://api.qa.douguo.net/robot/uploadpostimage"UPLOAD_IMG_URL="http://api.douguo.net/robot/uploadpostimage"#傳圖片#imgPath='D:\pics\http___img_nvsheng_com_uploads_allimg_170119_18-1f1191g440_jpg.jpg'm=MultipartEncoder(#fields={'user_id':'192323',#'images':('filename',open(imgPath,'rb'),'image/JPEG')}fields={'user_id':MyPipeline.user_id,'apisign':'99ea3eda4b45549162c4a741d58baa60','image':('filename',open(img_path,'rb'),'image/jpeg')})r=requests.post(UPLOAD_IMG_URL,data=m,headers={'Content-Type':m.content_type})returnr.json()defuploadPost(jsonData):CREATE_POST_URL=http://api.douguo.net/robot/uploadimagespost
reqPost=requests.post(CREATE_POST_URL,data=jsonData)
defgetRandomUser(userStr):user_list=[]user_chooesd=''foruser_idinstr(userStr).split(','):user_list.append(user_id)userId_idx=random.randint(1,len(user_list))user_chooesd=user_list[userId_idx-1]returnuser_chooesd
字段保存Items類
#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems##Seedocumentationin:#http://doc.scrapy.org/en/latest/topics/items.htmlimportscrapyclassFsmzItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()title=scrapy.Field()#tutor=scrapy.Field()#strongText=scrapy.Field()text=scrapy.Field()imags=scrapy.Field()
在命令行里鍵入
scrapycrawlMySpider-astart_url=www.aaa.com
以上就是怎么在Python中使用Scrapy爬取網頁內容,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
【資料圖】在生活中,很多人都不知道如何使用余額寶是什么意思,其實他的意思是非常簡單的,下面就是小編搜索到的如何使用余額寶相關的一些知識,我們一起來學習下吧!如何使用支付寶中的余額寶功能工具/原料智能手機一部支付寶APP支付寶/銀行卡余額若干方法/步驟11、注冊/登陸上支付寶,首先點擊“我的”,其次點擊“余額寶”。2、進入到余額寶頁面,如果余額寶未開通,需要同意相關協議,點擊開通余額寶。如果已開通,...
根據新聞報道,美聯儲預計在5月粉大幅加息,而隨著美國經濟的情況的變化,開始更大規??s表的概率大大提高,那么美國縮表是啥意思?美國縮表意味著什么?下文就來帶大家了解一下。美國縮表的意思是指美聯儲縮減資產負債表。數據顯示,2020年疫情爆發以來,美聯儲的資產負債持續擴大,ONRRP工具用量已經突破1.5萬億,美聯儲官員曾多次強調,未來將要進行縮表??s表是一種縮減資產負債表的方式,所以簡單理解的話,那就...
權證交易指的是什么?權證交易指的是持有人獲取的是一個權利,而不是責任,受人有權利決定是否履行契約,而發行人只有被執行的義務,因此為獲得這一項權利投資人需要付出一定的代價,權證和怨氣或者是期貨的主要分別就是在于前者持有人獲得的不是一種責任而是一種權利,后者持有人需要有責任執行雙方簽訂的買賣合約,也就是必須以一個指定的價格在指定的未來時間交易指定的相關資產,而這種交易被稱之為權證交易。權證的起源與發展...