URL 字段的解析

1.修改爬取的目標地址

咱們知道若是想要爬取網站的數據須要在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

2.解析標題的超連接a標籤的跳轉地址和標題內容

  • 那咱們繼續用csdn的今天推薦做爲爬取信息,首先須要在CsdnSpider類中的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)
  • 接着咱們循環獲得的列表,拿到每個a標籤的url地址,而後使用Request請求,須要傳遞兩個參數,一個是url用於告訴咱們接下來解析哪一個頁面,能夠經過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)

3.Request對象的介紹

  • 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:處理異常的回調函數;

參考:https://www.9xkd.com/user/plan-view.html?id=8660944990

相關文章
相關標籤/搜索