scrapy 每次在scrappy上更改strat_urls

ars1skjm  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(146)

我想修改剪贴板上的strat_url。我是日本人,我想翻译英语单词。使用weblio,即互联网上的英语词典,我想用剪贴板自动获得单词的方法。

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
import logging
from elscrapy.items import ElscrapyItem
class WordSpider(scrapy.Spider):
    name = 'word'
    allowed_domains = ['ejje.weblio.jp']
    #start_urls = ['http://ejje.weblio.jp/']

    def __init__(self, query='', *args,**kwargs):
        super(WordSpider, self).__init__(*args,**kwargs)
        self.start_urls = ['https://ejje.weblio.jp/content/' + query]

    def parse(self, response):
        word=response.xpath('//*[@id="summary"]/div[2]/p/span[2]/text()').get()
        yield{
            'word':word
        }

我每次都改变start_urls,通过输入下面的命令。

scrapy crawl word -a query=relative

然而,当csv的输出命令时,输出低于或csv为空。

ERROR: Error processing {'word': '\n                比較上の、相対的な、相関的な、(…と)関係があって、関連して、(…に)呼応して、比例して、関係を示す、関係詞に導かれた'}

请告诉我输出csv文件的解决方案

jdg4fx2g

jdg4fx2g1#

我用字符串列表代替参数传递来输入翻译单词。2我认为这比手工输入更节省时间。
如果您需要翻译多个单词,您可以将 * 单词列表 * 更改为世界列表文件。
第一个关键点是POST调用返回翻译的单词HTML中我通过Postman检查了它,在正文中有*x-www-form-urlencoded*作为附加图像。
第二个关键点是翻译的单词或语句有不同的解析,这取决于原始单词的输入。我用你的问题的例子。两种类型(单词和语句)都是作品。
在请求后呼叫后,通过删除找到已翻译的单词。
在Scrapy内部,请求对
weblio.jp
的POST调用(带有原始单词)
1.开机自检调用x1c 0d1x
1.这是输入文字

words = ['比較上の','相対的な','(…と)関係があって', '関連して','(…に)呼応して','比例して','関係を示す','関係詞に導かれた']

1.这是刮擦结果

[
    {
        "word": "比較上の",
        "translate": "relative"
    },
    {
        "word": "(…に)呼応して",
        "translate": "in concert with…"
    },
    {
        "word": "比例して",
        "translate": "pro rata"
    },
    {
        "word": "相対的な",
        "translate": "relative"
    },
    {
        "word": "(…と)関係があって",
        "translate": "Be connected with each other (with ...)\n\nBe connected (with ...)"
    },
    {
        "word": "関係を示す",
        "translate": "I show relations"
    },
    {
        "word": "関連して",
        "translate": "in connection with"
    },
    {
        "word": "関係詞に導かれた",
        "translate": "I was led to the relative\n\nIt was derived by a relative"
    }
]
  1. word.py-零碎的代码
import scrapy
import urllib

class WordSpider(scrapy.Spider):
    name = "word"

    def start_requests(self):
        url = 'https://translate.weblio.jp/'
        words = ['比較上の','相対的な','(…と)関係があって', '関連して','(…に)呼応して','比例して','関係を示す','関係詞に導かれた']
        for word in words:
            my_data = {
                'lp': 'JE',
                'lpf': 'JE',
                'tm': '72807',
                'tlt': 'english',
                'originalText': word
            }
            yield scrapy.Request(
                url=url,
                method='POST',
                body=urllib.parse.urlencode(my_data),
                headers={'Content-Type':'application/x-www-form-urlencoded'}, 
                callback=self.parse
            )

    def parse(self, response):
        # find original word
        word=response.css("textarea.contTAGb::text").get()

        # find translate word
        translate=response.css("div.transExpB ul li::text").get()
        if not translate:
            translate = ''
            # find translate statement
            translate=response.xpath('//input[@id="reTranslatedText"]').xpath('@value').get()
        yield{
            'word': word,
            'translate': translate
        }
  1. setting.py-避免使用robot.txt并可以导出日语字符。
BOT_NAME = 'word'
SPIDER_MODULES = ['word.spiders']
NEWSPIDER_MODULE = 'word.spiders'
ROBOTSTXT_OBEY = False
FEED_EXPORT_ENCODING = 'utf-8'

从终端运行

scrapy crawl word -o translate.json

1.如果你想相反的方向(英语到日语)使用这个POST选项在身体。

相关问题