zoukankan      html  css  js  c++  java
  • step5: 编写spider爬取

    改写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

    调试结果

  • 相关阅读:
    Codeforces 749C【模拟】
    Codeforces 358D【DP】
    Lightoj1122 【数位DP】
    Codeforces 744C【DFS】
    大晚上就是想说说话
    HDU5997 【线段树】
    codeforces743D 【DFS】
    lightoj 1422【区间DP·分类区间首元素的情况】
    lightoj 1125【背包·从n个选m个】
    Lightoj 1147【DP】
  • 原文地址:https://www.cnblogs.com/coolwinds/p/7450338.html
Copyright © 2011-2022 走看看