日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapy基础 之 静态网页实例

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scrapy基础 之 静态网页实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,scrapy爬蟲基本流程:

? ? 1. 創建一個新的Scrapy Project

? ? > scrapy startproject 項目名稱? ? #系統會在當前目錄下創建一個項目名稱命名的文件夾,其下包含以下文件:

? ? ? ??scrapy.cfg: 項目配置文件

? ? ? ? items.py: 需要提取的數據結構定義文件,在items.py里面定義我們要抓取的數據:

? ? ? ? pipelines.py:管道定義,PipeLine用來對Spider返回的Item列表進行保存操作,可以寫入到文件、或者數據庫等。

? ? ? ? settings.py: 爬蟲配置文件,包括發送請求次數,間隔時間,等等

? ? ? ? spiders: 放置spider的目錄,也就是爬蟲的主程序,至少包含以下三個要素:name:spider的標識,parse()方法:當start_urls里面的網頁抓取下來之后需要調用這個方法解析網頁內容,同時需要返回下一個需要抓取的網頁,或者返回items列表。start_url :一個url列表,spider從這些網頁開始抓取.

? ? 2. 定義你需要從網頁中提取的元素Item

? ? 3.實現一個Spider類,通過接口完成爬取URL和提取Item的功能

? ? 4. 實現一個Item PipeLine類,完成Item的存儲功能

注意:

? ? > scrapy startproject huxiu2? ? #在當前文件夾創建一個名為huxiu2的文件夾,文件夾有settings,items,pipeline等文件構成一個爬蟲框架

? ? 自己寫的爬蟲程序要寫在projectname/projectname/spiders目錄下

2,配置items文件

目標:虎嗅網新聞列表的名稱、鏈接地址和摘要爬取下來。

import scrapy class HuxiuItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title=scrapy.Field()link=scrapy.Field()desc=scrapy.Field()posttime=scrapy.Field()

注意:title,auther等內容將會是每行中存放信息的條目,也就是需要爬取的信息。

? ? ? ? ? ?輸出和爬取程序不在一個文件里的好處是,未來可以使用Scrapy中其他有用的組件和幫助類。雖然目前感受不深,先按照框架來吧

3,寫第一個spider

必不可少的要素:如果采用了items.py一定要先import一下,繼承scrapy.Spider類并且有name,start_urls,parse。

from huxiu2.items import Huxiu2Item #整個爬蟲project的名字為huxiu2, import scrapyclass Huxiu2Spider(scrapy.Spider):name = "huxi2"allowed_domains = ['huxiu.com'] # 只有這個域名下的子域名可以被允許爬取start_urls = ['http://www.huxiu.com/index.php']def parse(self, response):for sel in response.xpath('//div[@class ="mod-info-flow"]/div/div[@class="mob-ctt index-article-list-yh"]'):item = HuxiuItem()item['title'] = sel.xapth('h2/a/text()').extract_first()item['link'] = sel.xpath('h2/a/@href').extract_first()url = response.urljoin(item['link'])item['desc'] = sel.path('div[@class ="mob-sub"]/text()').extract_first()print item['title'],item['link'], item['desc']
#結果是無法爬取,估計需要設置headers。下文是修正版,啦啦啦,好from huxiu2.items import Huxiu2Item #整個爬蟲project的名字為huxiimpofrom huxiu2.items import Huxiu2Item import scrapyclass Huxiu2Spider(scrapy.Spider):name = "huxiu"# allowed_domains = ['huxiu.com'] # 只有這個域名下的子域名可以被允許爬取# start_urls = ['http://www.huxiu.com'] #有了重定義的start_requests就不用start_urls啦def start_requests(self):
# start_urls作用是開始請求第一個網址,默認就是使用start_requests方法,不帶任何參數地請求,現在我們為了爬取信息必須要帶上參數,
# 所以我們要自定義一下這個方法。
# 下方的request默認參數是:url, callback=None, method='GET', headers=None, body=None,cookies=None, meta=None, encoding='utf-8',
# priority=0,dont_filter=False, errback=None, flags=None。 所以cookie和headers是分開的,至于其余的參數,以后詳解
url='http://www.huxiu.com/index.php'head={"User-Agent":"info"} cookie={'key':'value'} #自己去網頁f12看哦,復制以后改成字典格式yield scrapy.Request(url=url,cookies=cookie,callback=self.parse,headers=head)passdef parse(self, response):print ">>>>>呵呵"for i in response.xpath('//div[@class="mod-b mod-art clearfix "]'):item=Huxiu2Item()item['title'] = i.xpath('./div[@class="mob-ctt index-article-list-yh"]/h2/a/text()').extract_first()item['link']=i.xpath('./div[@class="mob-ctt index-article-list-yh"]/h2/a/@href').extract_first()item['desc']=i.xpath('.//div[@class="mob-sub"]/text()').extract_first()print item['title'],item['link'],item['desc']

?

?4,處理鏈接進入到每篇文章中獲取信息

? ? 在items.py文件中,我們定義了posttime=scrapy.Field(),但是發送時間只有在具體的文章被打開以后才能夠得到,所以,我們要同時處理第二層網址。

from huxiu2.items import Huxiu2Item #整個爬蟲project的名字為huxiu2, import scrapyclass Huxiu2Spider(scrapy.Spider):name = "huxi3"allowed_domains = ['huxiu.com'] # 只有這個域名下的子域名可以被允許爬取start_urls = ['http://www.huxiu.com'] #相當于第一次發出請求def parse(self, response):for sel in response.xpath('//div[@class ="mod-info-flow"]/div/div[@class="mob-ctt index-article-list-yh"]'):item = HuxiuItem() #實例化一個item用于儲存數據item['title'] = sel.xapth('h2/a/text()').extract_first()item['link'] = sel.xpath('h2/a/@href').extract_first()url = response.urljoin(item['link']) #生成可訪問的打開每一篇文章的新網址item['desc'] = sel.xpath('div[@class ="mob-sub"]/text()').extract_first()print item['title'],item['link'], item['desc']yield scrapy.Request(url,callback=self.parse_artical) #開始第二層的請求,網址是url,callbac參數定義的是第二層爬取將調動哪個函數def parse_artical(self,response):item=Huxiu2Item() #同樣需要實例一下用來儲存數據item['posttime']=response.xpath('//span[@class="article-time pull-left"]/text()').extract_first()item['link']=response.url #進去第二層以后順帶更新一下litem['link'],因為之前的link不完整,不用之前的url變量是因為在此處更新可以確保新網址可打開。print item['posttime'],item['link']yield item

?5,導出抓取數據

第一種方法:直接打印:>scrapy crawl huxi3

第二種方法:導出結果到jason文件:>scrapy crawl huxiu -o items.json

第三種方法:保存到數據庫

? ? 保存到數據庫,可以直接在spiders里面定義,也可以使用piplines

? ? 直接寫在spiders里面的方法:

from huxiu2.items import Huxiu2Item #整個爬蟲project的名字為huxiu2, import scrapy,pymysqlclass Huxiu2Spider(scrapy.Spider):name = "huxiu"def start_requests(self):url='http://www.huxiu.com/index.php'head={"User-Agent":"xxx"}cookie={"xxx": "yyy"}yield scrapy.Request(url=url,cookies=cookie,callback=self.parse,headers=head)passdef parse(self, response):db = pymysql.connect("localhost", "root", "xxxx", "xxxx") #先要連接上數據庫cursor = db.cursor() sql="""create table huxiu(`title` varchar(50),`link` varchar(50),`desc` varchar(50))DEFAULT CHARSET=utf8""" #設置數據表的編碼方式try:cursor.execute(sql) #創建數據表新表db.commit()except:db.rollback()print "error first try"
for i in response.xpath('//div[@class="mod-b mod-art clearfix "]'):item=Huxiu2Item()item['title'] = i.xpath('./div[@class="mob-ctt index-article-list-yh"]/h2/a/text()').extract_first().encode("utf-8")tmplink=i.xpath('./div[@class="mob-ctt index-article-list-yh"]/h2/a/@href').extract_first().encode("utf-8")item['link']=response.urljoin(tmplink).encode("utf-8")item['desc']=i.xpath('.//div[@class="mob-sub"]/text()').extract_first().encode("utf-8") #加encode的原因是原數據是unicode格式的#print '第一層',item['title'],item['link'],item['desc']a=str(item['title'])b=str(item['link'])c=str(item['desc'])print item['title'],"結果"sql2="""INSERT INTO huxiu VALUES ('%s', '%s','%s')""" % (a,b,c) #傳參到sql語句中,%s表示傳的是字符串try:cursor.execute(sql2)db.commit()except:db.rollback()print "error of second try"db.close()

? ? 使用pipeline的方法:

? ? 注意:要想使用pipeline,

? ? ? ?   首先得在spiders中有yield item作為結尾,只要這樣才能生成item,否則item是空的;

? ? ? ? ? ? ? ?其次得在settings中啟用pipelines,格式如下:ITEM_PIPELINES = {'huxiu2.pipelines.Huxiu2PipelinesJson': 300,},字典的鍵是自定義的pipeline函數名

? ? ? ? ? ? ? ?最后要注意pipeline內的class下的函數基本有三個,分別在開始中間和結束時候執行

spider的代碼:

from huxiu2.items import Huxiu2Item #整個爬蟲project的名字為huxiu2, import scrapy,pymysqlclass Huxiu2Spider(scrapy.Spider):name = "huxiu"def start_requests(self): #自定義的request方法url='http://www.huxiu.com/index.php'head={"User-Agent":"yyy"}cookie={"xxx": "yyy"}yield scrapy.Request(url=url,cookies=cookie,callback=self.parse,headers=head)passdef parse(self, response): #自定義的信息獲取函數for i in response.xpath('//div[@class="mod-b mod-art clearfix "]'):item=Huxiu2Item()item['title'] = i.xpath('./div[@class="mob-ctt index-article-list-yh"]/h2/a/text()').extract_first().encode("utf-8")tmplink=i.xpath('./div[@class="mob-ctt index-article-list-yh"]/h2/a/@href').extract_first().encode("utf-8")item['link']=response.urljoin(tmplink).encode("utf-8")item['desc']=i.xpath('.//div[@class="mob-sub"]/text()').extract_first().encode("utf-8")print '第一層',item['title'],item['link'],item['desc'] #為了看到是否可以成功爬取信息,為了搞明白pipelines的原理yield item #yield item非常必要

pipelines的代碼:

# -*- coding: utf-8 -*-# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport jsonclass Huxiu2PipelinesJson(object):def __init__(self):print '開始時候執行' #在得到有用數據以前打印出來self.file=open('Huxiu.json','w') #會在當前目錄生成Huxiu.json文件def process_item(self, item, spider):print 'process_item running' #每次print一組信息以后就會打印出這句話,說明item是一條一條寫進json文件中的,而不是生成item以后再總的寫進去content=json.dumps(dict(item),ensure_ascii=False)+'\n' #python信息轉化為json信息的函數self.file.write(content)return itemdef close_spider(self,spider):print '結束時候' #有用的信息執行完畢后打印出來這句話self.file.close()

?

轉載于:https://www.cnblogs.com/0-lingdu/p/9532350.html

總結

以上是生活随笔為你收集整理的scrapy基础 之 静态网页实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日产精品久久久久 | 欧美精品xxx | 看黄色一级大片 | 亚洲毛片网 | 香蕉视频免费在线 | 国产三级日本三级在线播放 | 99久久久无码国产精品性波多 | 91精品国产综合久久久蜜臀粉嫩 | 香蕉视频黄色在线观看 | 最新高清无码专区 | 亚洲精品视频一区二区三区 | 日韩亚洲欧美一区二区三区 | 黑人超碰| 国产综合在线观看 | 伊人影院久久 | 日韩资源| 国产在线传媒 | 久久精品噜噜噜成人 | 极品色综合| 国产91在线高潮白浆在线观看 | 日韩久久一级片 | 天天操夜操 | va婷婷在线免费观看 | 日毛片 | 精品国产三级a∨在线 | 69视频免费看 | 亚洲欧美日韩精品一区 | 男女啪啪免费网站 | 久久综合成人 | 亚洲永久精品国产 | 国内毛片毛片 | 免费91视频| 免费网站黄色 | 刘玥91精选国产在线观看 | 成人午夜精品一区二区三区 | 7777奇米影视 | 日韩h视频| 亚洲日本香蕉 | 一道本一区 | 国产乡下妇女做爰毛片 | 91禁动漫在线 | 熟女精品一区二区三区 | 99久| 又紧又大又爽精品一区二区 | 日韩女优中文字幕 | 国产精品精品 | 翔田千里88av中文字幕 | 国产91一区二区三区在线精品 | 成人精品 | 美女狠狠干 | 欧美色交| 国产精品69毛片高清亚洲 | 黄色wwww | 成人在线视频网站 | 国产精品国产三级国产Av车上的 | 午夜亚洲AV永久无码精品蜜芽 | 日韩av线 | 亚洲国产精品久久精品怡红院 | 波多野结衣91 | 欧美乱妇高清无乱码 | 国产女人水真多18毛片18精品 | 欧美亚洲另类图片 | 亚洲情se | 欧美xxxx黑人又粗又长密月 | 黄色免费av网站 | 黄网站在线免费看 | 国产精品第三页 | 成人视屏在线 | 99热1| 91极品在线 | 天堂中文在线8 | 波多野结衣在线视频免费观看 | 伊人91在线 | 天天躁日日躁狠狠躁 | 都市激情久久 | 日韩欧美中字 | 日本吃奶摸下激烈网站动漫 | 欧美女同视频 | 免费观看一区二区三区毛片 | 午夜影院在线看 | 久久不射影院 | 亚洲欧洲成人在线 | 成人精品av| 国产免费视屏 | 国产在线看黄 | 性感美女一区二区三区 | 自拍偷拍一区二区三区 | 涩涩屋视频在线观看 | 尤物视频网站在线观看 | 天堂网ww | 午夜伦伦电影理论片费看 | 国产叼嘿视频在线观看 | 五月婷婷导航 | 亚洲一区二区三区色 | 中文字幕亚洲日本 | 91福利社在线观看 | 91国产一区 | 国产成人一区二区三区视频 | 国产片淫乱18一级毛片动态图 |