爬虫scrapy框架(7)——post请求

t013b9c86f5a43c0037.jpg
  • scrapy默认的是get请求。这次我们尝试用post请求。
    我们还是以有道词典在线翻译网站为例:http://fanyi.youdao.com/?keyfrom=fanyi.logo
    通过翻译获取真实网址url为:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
    实际运用中需要将_o去掉。
  1. 首先我们创建一个项目,新建一个文件夹,按住shift,鼠标右键在此处打开命令窗口,输入scrapy startproject youdaosipder。
  2. 创建完成后,输入scrapy genspider ydspider youdao.com 如果没有出现相应爬虫文件,在这样的文件夹内再次打开命令窗口输入刚才的命令。
    image.png

    ydspider.py

# -*- coding: utf-8 -*-
import scrapy


#http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
class YdspiderSpider(scrapy.Spider):
    name = 'ydspider'
    allowed_domains = ['fanyi.youdao.com']
    # start_urls = ['http://youdao.com/']

    def start_requests(self):
        url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
        #向队列中加入post请求
        yield scrapy.FormRequest(
            url=url,
            formdata={
                    'i':'男人',
                    'from':'AUTO',
                    'to':'AUTO',
                    'smartresult':'dict',
                    'client':'fanyideskweb',
                    'salt':'15589655028559',
                    'sign':'6781389ab298673f7036bce9cd99815b',
                    'ts':'1558965502855',
                    'bv':'ab57a166e6a56368c9f95952de6192b5',
                    'doctype':'json',
                    'version':'2.1',
                    'keyfrom':'fanyi.web',
                    'action':'FY_BY_REALTlME'
            },
            callback=self.parse
        )

    def parse(self, response):
        print('-----------------------------------------------------------')
        print(response.body)

在settings.py中关掉(注释掉)机器人协议。机器人协议是网站的一些声明,允许用户什么行为,不允许什么行为,建议大家了解一下。


image.png

在黑屏终端中输入scrapy crawl ydspider
image.png

翻译结果为 A man

你可能感兴趣的:(爬虫scrapy框架(7)——post请求)