Scrapy 框架 手动发送请求 POST 请求的发送

手动发送请求

import scrapy

from choutiSpider.items import ChoutispiderItem

class ChoutiSpider(scrapy.Spider):
    name = ‘chouti‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://dig.****.com/r/scoff/hot/1‘]

    # 通用模板 url
    url = ‘https://dig.****.com/r/scoff/hot/%s‘
    page_num = 1

    def parse(self, response):
        div_list = response.xpath(‘//div[@id="content-list"]/div‘)
        # print(div_list)

        print(self.page_num)
        for div in div_list:
            content = div.xpath(‘./div[@class="news-content"]/div[1]/a/text()‘).extract_first().strip()
            author = div.xpath(‘./div[@class="news-content"]/div[2]/a[4]/b/text()‘).extract_first()
            # print(content, author)
            item = ChoutispiderItem()
            item[‘author‘] = author
            item[‘content‘] = content
            # 提交数据 到管道中
            yield item
        # 手动发送请求  分页爬取
        if self.page_num < 120:
            self.page_num += 1
            new_url = self.url % self.page_num
            # 发送请求 提交
            yield scrapy.Request(url=new_url, callback=self.parse)

post 请求发送

# 在scrapy框架中默认情况下cookie会被自动处理,无需手动!

class PostdemoSpider(scrapy.Spider):
    name = ‘postdemo‘
    allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://fanyi.****.com/sug‘]
    # 调用父类的 发送请求的 方法
    def start_requests(self):
        for url in self.start_urls:
            data = {
                ‘kw‘: ‘cat‘
            }
            yield scrapy.FormRequest(url=url, formdata=data, callback=self.parse)

    def parse(self, response):
        print(response.text)

在scrapy框架中默认情况下cookie会被自动处理,无需手动!

settings 配置:

# Disable cookies (enabled by default)
# COOKIES_ENABLED = False

请求传参:

  • 二级详情页面 的 item 传递
import scrapy

from boosPro.items import BoosproItem

class BoosSpider(scrapy.Spider):
    name = ‘boos‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://www.****.com/c101010100/?query=python%E7%88%AC%E8%99%AB&page=1‘]

    url = ‘https://www.****.com/c101010100/?query=python%E7%88%AC%E8%99%AB&page=%s‘
    page_num = 1

    def parse(self, response):
        li_list = response.xpath(‘//div[@class="job-list"]/ul/li‘)
        for li in li_list:
            item = BoosproItem()
            title = li.xpath(‘.//div[@class="job-title"]/text()‘).extract_first()
            # 薪资 salary
            salary = li.xpath(‘.//div[@class="info-primary"]/h3/a/span/text()‘).extract_first()
            # 公司 company
            company = li.xpath(‘.//div[@class="company-text"]/h3/a/text()‘).extract_first()
            detail_url = ‘https://www.zhipin.com‘ + li.xpath(‘.//div[@class="info-primary"]/h3/a/@href‘).extract_first()
            item[‘title‘] = title
            item[‘salary‘] = salary
            item[‘company‘] = company

            # 对详情页的url进行手动请求的发送
            yield scrapy.Request(url=detail_url, callback=self.parsrDetail, meta={‘item‘: item})

        if self.page_num <= 3:
            self.page_num += 1
            newUrl = self.url % self.page_num
            yield scrapy.Request(url=newUrl, callback=self.parse)

    # 用来解析详情页的相关的数据
    def parsrDetail(self, response):
        # 接收meta
        item = response.meta[‘item‘]
        job_desc = response.xpath(‘//*[@id="main"]/div[3]/div/div[2]/div[2]/div[1]/div//text()‘).extract()
        company_content = response.xpath(‘//*[@id="main"]/div[3]/div/div[2]/div[2]/div[2]/div/text()‘).extract_first()

        job_desc = ‘ ‘.join(job_desc)
        item[‘job_desc‘] = job_desc
        item[‘company_content‘] = company_content
        # print(job_desc, 1111111)

        yield item

原文地址:https://www.cnblogs.com/ellisonzhang/p/11113273.html

时间: 2024-07-30 15:58:00

Scrapy 框架 手动发送请求 POST 请求的发送的相关文章

scrapy框架的日志等级和请求传参, 优化效率

目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 日志信息的种类: ERROR : 一般错误 WARNING : 警告 INFO : 一般的信息 DEBUG : 调试信息 设置日志信息指定输出: 在settings.py配置文件中,加

scrapy框架之日志等级和请求传参

一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 WARNING : 警告 INFO : 一般的信息 DEBUG : 调试信息 默认的显示级别是DEBUG - 设置日志信息指定输出: 在settings.py配置文件中,加入LOG_LEVEL = ‘指定日志信息种类’即可.LOG_FILE = 'log.txt'则表示将日志信息写入到指定文件中进行

python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件

# settings 配置 UA USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' 一丶scrapy的图片数据爬取(流数据的爬取) ? scrapy中封装好了一个管道类(ImagesPipeline),基于该管道类可以实现图片资源的请求和持久化存储 编码流程: 爬虫文件中解析出图片的地址 将

【Scrapy框架之发送POST请求】 &#566830;

原文: http://blog.gqylpy.com/gqy/364 "实现发送POST请求 在爬虫文件中,我们一般不需要手动的对start_urls列表中的起始url发送请求,因为爬虫文件中的爬虫类继承了父类Spider,Spider类中的start_requests方法会自动向起始url列表中的所有url发起请求. 但需要注意的是,start_requests方法发起的是GET请求,如果我们想发起POST请求,则需要在子类中重写该方法. 下面我们将重写start_requests方法,来实现

爬虫学习 12.scrapy框架之递归解析和post请求

爬虫学习 12.scrapy框架之递归解析和post请求 今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化存储 - 需求分析:每一个页面对应一个url,则scrapy工程需要对每一个页码对应的url依次发起请求,然后通过对应的解析方法进行作者和段子内容的解析. 实现方案: 1.将每一个页码对应的url存放到爬虫文件的起始url列表(start_

爬虫5 scrapy框架2 全站爬取cnblogs, scarpy请求传参, 提高爬取效率, 下载中间件, 集成selenium, fake-useragent, 去重源码分析, 布隆过滤器, 分布式爬虫, java等语言概念补充, bilibili爬视频参考

1 全站爬取cnblogs # 1 scrapy startproject cnblogs_crawl # 2 scrapy genspider cnblogs www.cnblogs.com 示例: # cnblogs_crawl/cnblogs_crawl/spiders/cnblogs.py import scrapy from cnblogs_crawl.items import CnblogsCrawlItem from scrapy.http import Request class

【Scrapy框架之请求传参案例】 -- 2019-08-08 20:40:13

原文: http://106.13.73.98/__/141/ 在某些情况下,我们爬取的数据不在同一个页面. 例如下面的案例1,我们要爬取一个电影网站,电影的排名.名称.主演分在一页,而其它的信息分在二级子页面中.这时,我们就需要用到请求传参. 案例1:爬取97电影网中所有热门电影的详细信息 97电影网热门电影URL:http://www.55xia.com/movie/hotest/ 第一步,爬虫文件: # -*- coding: utf-8 -*- import scrapy from Te

JavaScript之Ajax-2 Ajax(使用Ajax发送get请求、使用Ajax发送post请求)

一.使用Ajax发送get请求 发送异步请求的步骤 - 获取Ajax对象:获取 XMLHttpRequest对象实例 - 创建请求:调用XMLHTTPRequest对象的open方法 - 设置回调函数:为Ajax对象的 onreadystatechange事件设定响应函数 - 发送请求:调用Ajax对象的send方法 - 获取Ajax对象     - 创建请求 - 注意: - true:表示发送异步请求(当Ajax对象发送请求时,用户仍然可以对当前页面做其它的操作) - false:表示发送同步

ASIHTTP 框架,同步、 异步请求、 上传 、 下载

ASIHTTPRequest详解 ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP 认证.在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们的代码加轻简灵活. 下面就举例说明它的 API 用法. 发起一个同步请求 同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件.所以,在应用程序设计时,大多被用在