摘要:百度云搜索,搜各種資料搜網盤,搜各種資料編寫爬蟲文件循環抓取內容方法,將指定的地址添加到下載器下載頁面,兩個必須參數,參數頁面處理函數使用時需要方法,是庫下的方法,是自動拼接,如果第二個參數的地址是相對路徑會自動與第一個參數拼接導
【百度云搜索,搜各種資料:http://bdy.lqkweb.com】 【搜網盤,搜各種資料:http://www.swpan.cn】
編寫spiders爬蟲文件循環抓取內容
Request()方法,將指定的url地址添加到下載器下載頁面,兩個必須參數,
參數:
url="url"
callback=頁面處理函數
使用時需要yield Request()
parse.urljoin()方法,是urllib庫下的方法,是自動url拼接,如果第二個參數的url地址是相對路徑會自動與第一個參數拼接
#?-*-?coding:?utf-8?-*- import?scrapy from?scrapy.http?import?Request?????????????????????????????#導入url返回給下載器的方法 from?urllib?import?parse????????????????????????????????????#導入urllib庫里的parse模塊 class?PachSpider(scrapy.Spider): ????name?=?"pach" ????allowed_domains?=?["blog.jobbole.com"]??????????????????#起始域名 ????start_urls?=?["http://blog.jobbole.com/all-posts/"]?????#起始url ????def?parse(self,?response): ????????""" ????????獲取列表頁的文章url地址,交給下載器 ????????""" ????????#獲取當前頁文章url ????????lb_url?=?response.xpath("http://a[@class="archive-title"]/@href").extract()??#獲取文章列表url ????????for?i?in?lb_url: ????????????#?print(parse.urljoin(response.url,i))?????????????????????????????????????????????#urllib庫里的parse模塊的urljoin()方法,是自動url拼接,如果第二個參數的url地址是相對路徑會自動與第一個參數拼接 ????????????yield?Request(url=parse.urljoin(response.url,?i),?callback=self.parse_wzhang)??????#將循環到的文章url添加給下載器,下載后交給parse_wzhang回調函數 ????????#獲取下一頁列表url,交給下載器,返回給parse函數循環 ????????x_lb_url?=?response.xpath("http://a[@class="next?page-numbers"]/@href").extract()?????????#獲取下一頁文章列表url ????????if?x_lb_url: ????????????yield?Request(url=parse.urljoin(response.url,?x_lb_url[0]),?callback=self.parse)?????#獲取到下一頁url返回給下載器,回調給parse函數循環進行 ????def?parse_wzhang(self,response): ????????title?=?response.xpath("http://div[@class="entry-header"]/h1/text()").extract()???????????#獲取文章標題 ????????print(title)
Request()函數在返回url時,同時可以通過meta屬性返回一個自定義字典給回調函數
#?-*-?coding:?utf-8?-*- import?scrapy from?scrapy.http?import?Request?????????????????????????????#導入url返回給下載器的方法 from?urllib?import?parse????????????????????????????????????#導入urllib庫里的parse模塊 from?adc.items?import?AdcItem???????????????????????????????#導入items數據接收模塊的接收類 class?PachSpider(scrapy.Spider): ????name?=?"pach" ????allowed_domains?=?["blog.jobbole.com"]??????????????????#起始域名 ????start_urls?=?["http://blog.jobbole.com/all-posts/"]?????#起始url ????def?parse(self,?response): ????????""" ????????獲取列表頁的文章url地址,交給下載器 ????????""" ????????#獲取當前頁文章url ????????lb?=?response.css("div?.post.floated-thumb")??#獲取文章列表區塊,css選擇器 ????????#?print(lb) ????????for?i?in?lb: ????????????lb_url?=?i.css(".archive-title?::attr(href)").extract_first("")?????#獲取區塊里文章url ????????????#?print(lb_url) ????????????lb_img?=?i.css(".post-thumb?img?::attr(src)").extract_first("")?????#獲取區塊里文章縮略圖 ????????????#?print(lb_img) ????????????yield?Request(url=parse.urljoin(response.url,?lb_url),?meta={"lb_img":parse.urljoin(response.url,?lb_img)},?callback=self.parse_wzhang)??????#將循環到的文章url添加給下載器,下載后交給parse_wzhang回調函數 ????????#獲取下一頁列表url,交給下載器,返回給parse函數循環 ????????x_lb_url?=?response.css(".next.page-numbers?::attr(href)").extract_first("")?????????#獲取下一頁文章列表url ????????if?x_lb_url: ????????????yield?Request(url=parse.urljoin(response.url,?x_lb_url),?callback=self.parse)?????#獲取到下一頁url返回給下載器,回調給parse函數循環進行 ????def?parse_wzhang(self,response): ????????title?=?response.css(".entry-header?h1?::text").extract()???????????#獲取文章標題 ????????#?print(title) ????????tp_img?=?response.meta.get("lb_img",?"")????????????????????????????#接收meta傳過來的值,用get獲取防止出錯 ????????#?print(tp_img) ????????shjjsh?=?AdcItem()???????????????????????????????????????????????????????????????????#實例化數據接收類 ????????shjjsh["title"]?=?title??????????????????????????????????????????????????????????????#將數據傳輸給items接收模塊的指定類 ????????shjjsh["img"]?=?tp_img ????????yield?shjjsh????????????????????????????????#將接收對象返回給pipelines.py處理模塊
*
Scrapy內置圖片下載器使用
Scrapy給我們內置了一個圖片下載器在crapy.pipelines.images.ImagesPipeline,專門用于將爬蟲抓取到圖片url后將圖片下載到本地
第一步、爬蟲抓取圖片URL地址后,填充到?items.py文件的容器函數
爬蟲文件
#?-*-?coding:?utf-8?-*- import?scrapy from?scrapy.http?import?Request?????????????????????????????#導入url返回給下載器的方法 from?urllib?import?parse????????????????????????????????????#導入urllib庫里的parse模塊 from?adc.items?import?AdcItem???????????????????????????????#導入items數據接收模塊的接收類 class?PachSpider(scrapy.Spider): ????name?=?"pach" ????allowed_domains?=?["blog.jobbole.com"]??????????????????#起始域名 ????start_urls?=?["http://blog.jobbole.com/all-posts/"]?????#起始url ????def?parse(self,?response): ????????""" ????????獲取列表頁的文章url地址,交給下載器 ????????""" ????????#獲取當前頁文章url ????????lb?=?response.css("div?.post.floated-thumb")??#獲取文章列表區塊,css選擇器 ????????#?print(lb) ????????for?i?in?lb: ????????????lb_url?=?i.css(".archive-title?::attr(href)").extract_first("")?????#獲取區塊里文章url ????????????#?print(lb_url) ????????????lb_img?=?i.css(".post-thumb?img?::attr(src)").extract_first("")?????#獲取區塊里文章縮略圖 ????????????#?print(lb_img) ????????????yield?Request(url=parse.urljoin(response.url,?lb_url),?meta={"lb_img":parse.urljoin(response.url,?lb_img)},?callback=self.parse_wzhang)??????#將循環到的文章url添加給下載器,下載后交給parse_wzhang回調函數 ????????#獲取下一頁列表url,交給下載器,返回給parse函數循環 ????????x_lb_url?=?response.css(".next.page-numbers?::attr(href)").extract_first("")?????????#獲取下一頁文章列表url ????????if?x_lb_url: ????????????yield?Request(url=parse.urljoin(response.url,?x_lb_url),?callback=self.parse)?????#獲取到下一頁url返回給下載器,回調給parse函數循環進行 ????def?parse_wzhang(self,response): ????????title?=?response.css(".entry-header?h1?::text").extract()???????????#獲取文章標題 ????????#?print(title) ????????tp_img?=?response.meta.get("lb_img",?"")????????????????????????????#接收meta傳過來的值,用get獲取防止出錯 ????????#?print(tp_img) ????????shjjsh?=?AdcItem()???????????????????????????????????????????????????????????????????#實例化數據接收類 ????????shjjsh["title"]?=?title??????????????????????????????????????????????????????????????#將數據傳輸給items接收模塊的指定類 ????????shjjsh["img"]?=?[tp_img] ????????yield?shjjsh????????????????????????????????#將接收對象返回給pipelines.py處理模塊
第二步、設置?items.py?文件的容器函數,接收爬蟲獲取到的數據填充
#?-*-?coding:?utf-8?-*- #?Define?here?the?models?for?your?scraped?items # #?See?documentation?in: #?http://doc.scrapy.org/en/latest/topics/items.html import?scrapy #items.py,文件是專門用于,接收爬蟲獲取到的數據信息的,就相當于是容器文件 class?AdcItem(scrapy.Item):????#設置爬蟲獲取到的信息容器類 ????title?=?scrapy.Field()?????#接收爬蟲獲取到的title信息 ????img?=?scrapy.Field()???????#接收縮略圖 ????img_tplj?=?scrapy.Field()??#圖片保存路徑
第三步、在pipelines.py使用crapy內置的圖片下載器
1、首先引入內置圖片下載器
2、自定義一個圖片下載內,繼承crapy內置的ImagesPipeline圖片下載器類
3、使用ImagesPipeline類里的item_completed()方法獲取到圖片下載后的保存路徑
4、在settings.py設置文件里,注冊自定義圖片下載器類,和設置圖片保存路徑
#?-*-?coding:?utf-8?-*- #?Define?your?item?pipelines?here # #?Don"t?forget?to?add?your?pipeline?to?the?ITEM_PIPELINES?setting #?See:?http://doc.scrapy.org/en/latest/topics/item-pipeline.html from?scrapy.pipelines.images?import?ImagesPipeline??#導入圖片下載器模塊 class?AdcPipeline(object):??????????????????????#定義數據處理類,必須繼承object ????def?process_item(self,?item,?spider):???????#process_item(item)為數據處理函數,接收一個item,item里就是爬蟲最后yield?item?來的數據對象 ????????print("文章標題是:"?+?item["title"][0]) ????????print("文章縮略圖url是:"?+?item["img"][0]) ????????print("文章縮略圖保存路徑是:"?+?item["img_tplj"])??#接收圖片下載器填充的,圖片下載后的路徑 ????????return?item class?imgPipeline(ImagesPipeline):??????????????????????#自定義一個圖片下載內,繼承crapy內置的ImagesPipeline圖片下載器類 ????def?item_completed(self,?results,?item,?info):??????#使用ImagesPipeline類里的item_completed()方法獲取到圖片下載后的保存路徑 ????????for?ok,?value?in?results: ????????????img_lj?=?value["path"]?????#接收圖片保存路徑 ????????????#?print(ok) ????????????item["img_tplj"]?=?img_lj??#將圖片保存路徑填充到items.py里的字段里 ????????return?item????????????????????#將item給items.py?文件的容器函數 ????#注意:自定義圖片下載器設置好后,需要在
在settings.py設置文件里,注冊自定義圖片下載器類,和設置圖片保存路徑
IMAGES_URLS_FIELD?設置要下載圖片的url地址,一般設置的items.py里接收的字段
IMAGES_STORE?設置圖片保存路徑
#?Configure?item?pipelines #?See?http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES?=?{ ???"adc.pipelines.AdcPipeline":?300,??#注冊adc.pipelines.AdcPipeline類,后面一個數字參數表示執行等級, ???"adc.pipelines.imgPipeline":?1,????#注冊自定義圖片下載器,數值越小,越優先執行 } IMAGES_URLS_FIELD?=?"img"?????????????????????????????#設置要下載圖片的url字段,就是圖片在items.py里的字段里 lujin?=?os.path.abspath(os.path.dirname(__file__)) IMAGES_STORE?=?os.path.join(lujin,?"img")?????????????#設置圖片保存路徑
【轉載自:http://www.lqkweb.com】
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45102.html
摘要:百度云搜索,搜各種資料搜網盤,搜各種資料我們自定義一個來作為啟動文件導入執行命令方法給解釋器,添加模塊新路徑將文件所在目錄添加到解釋器執行命令爬蟲文件表達式基本使用設置爬蟲起始域名設置爬蟲起始地址默認爬蟲回調函數,返 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網盤,搜各種資料:http://www.swpan.cn】 我們自定義一個main.py來作為啟動...
摘要:百度云搜索,搜各種資料搜網盤,搜各種資料用命令創建自動爬蟲文件創建爬蟲文件是根據的母版來創建爬蟲文件的查看創建爬蟲文件可用的母版母版說明創建基礎爬蟲文件創建自動爬蟲文件創建爬取數據爬蟲文件創建爬取數據爬蟲文件創建一個基礎母版爬蟲,其他同理 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網盤,搜各種資料:http://www.swpan.cn】 用命令創建自動爬...
摘要:百度云搜索,搜各種資料搜網盤,搜各種資料請求請求就是我們在爬蟲文件寫的方法,也就是提交一個請求地址,請求是我們自定義的方法提交一個請求參數字符串類型地址回調函數名稱字符串類型請求方式,如果字典類型的,瀏覽器用戶代理設置字典類型鍵值對,向回調 【百度云搜索,搜各種資料:http://www.lqkweb.com】 【搜網盤,搜各種資料:http://www.swpan.cn】 Reque...
閱讀 859·2021-11-24 09:38
閱讀 1093·2021-10-08 10:05
閱讀 2583·2021-09-10 11:21
閱讀 2805·2019-08-30 15:53
閱讀 1832·2019-08-30 15:52
閱讀 1967·2019-08-29 12:17
閱讀 3421·2019-08-29 11:21
閱讀 1614·2019-08-26 12:17