咱們知道若是想要爬取網站的數據須要在spiders文件中建立一個蜘蛛,建立後這個蜘蛛中會自動生成一個類,類名也是由蜘蛛名加Spider組成,如上一節中爬去csdn網站生成的:CsdnSpider
類,這個類中的name
也就是蜘蛛的名稱,allowed_domains
是容許爬取網站的域名,start_urls
是須要爬取的目標網站的網址,若是須要更改爬取的目標頁面,只須要修改start_urls
就能夠了;css
import scrapy class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): pass
parse(self,response)
方法中使用response對象來對css選擇器獲取到的a元素的href值進行解析,如response.css('h2 a::attr(href)').extract()
,這樣就能夠獲得一個url地址的列表;import scrapy class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): urls = response.css('.company_list .company_name a::attr(href)').extract() print(urls)
parse.urljoin()
方法拼接頁面連接,另外一個是callback回調函數。這個回調函數是咱們本身定義的,也會傳遞一個response對象,經過這個response對象對css選擇器獲取的元素進行解析,這樣咱們就能夠拿到每一個解析頁面的標題內容了;html
import scrapy from scrapy.http import Request from urllib import parse class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): # 獲取url urls = response.css('.company_list .company_name a::attr(href)').extract() # print(urls) # 解析頁面 for url in urls: yield Request(url = parse.urljoin(response.url, url), callback=self.parse_analyse, dont_filter=True) # 回調函數 def parse_analyse(self, response): title = response.css('.company_list .company_name a::text').extract_first() print(title)
class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8',priority=0, dont_filter=False, errback])
,一個request對象表明一個HTTP請求,一般由Spider產生,經Downloader執行從而產生一個Response;cookie
url
:用於請求的URL;dom
callback
:指定一個回調函數,該回調函數以這個request是的response做爲第一個參數,若是未指定callback則默認使用spider的parse()方法;scrapy
method
: HTTP請求的方法,默認爲GET;ide
headers
:請求的頭部;函數
body
:請求的正文,能夠是bytes或者str;網站
cookies
:請求攜帶的cookie;編碼
meta
:指定Request.meta屬性的初始值,若是給了該參數,dict將會淺拷貝;url
encoding
:請求的編碼, 默認爲utf-8;
priority
:優先級,優先級越高,越先下載;
dont_filter
:指定該請求是否被 Scheduler過濾,該參數可使request重複使用;
errback
:處理異常的回調函數;