1. 程式人生 > >編寫spider爬取

編寫spider爬取

ref 域名 oat response class 功能 遍歷 爬取 完成

改寫parse函數

實現功能:

1.獲取文章列表頁中的文章url並交給scrapy下載後,交給解析函數進行具體字段的解析
2.獲取下一頁的url並交給scrapy進行下載,下載完成後交給parse

提取一頁列表中的文章url

#解析列表頁中所有文章的url,遍歷出來
def parse(self, response):
    # 解析列表頁中的所有url並交給scrapy下載後進行解析
    post_urls = response.css(#archive .floated-thumb .post-thumb a::attr(href)).extract()
    for post_url in
post_urls: print(post_url)

調試輸出結果

技術分享

如何讓scrapy進行下載

引入request對象

from scrapy.http import Request

修改提取字段類類名為parse_detail,引入parse類進行域名拼接,yield下載

from urllib import parse

    def parse(self, response):

        #獲取文章列表頁中的文章url並交給解析函數進行具體字段的解析
        #獲取下一頁的url並交給scrapy進行下載,下載完成後交給parse
post_urls = response.css(#archive .floated-thumb .post-thumb a::attr(href)).extract() for post_url in post_urls: #yield Request(url=post_url,callback=self.parse_detail) yield Request(url=parse.urljoin(response.url, post_url),callback=self.parse_detail) #域名拼接 下載 下載完成後調用parse_detail解析字段

獲取下一頁並交給scrapy進行下載

        #提取下一頁並交給scrapy下載
        next_url = response.css(.next.page-numbers::attr(href)).extract_first("")#空格去掉表示同時擁有兩個屬性
        if next_url:
            yield Request(url=parse.urljoin(response.url, next_url), callback=self.parse)  #繼續調用parse解析出列表頁中具體文章的url

調試前修改start_url為all-posts

技術分享

調試結果

技術分享

技術分享

編寫spider爬取