Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python剪贴编码utf-8_Python_Python 3.x_Encoding_Scrapy - Fatal编程技术网

Python剪贴编码utf-8

Python剪贴编码utf-8,python,python-3.x,encoding,scrapy,Python,Python 3.x,Encoding,Scrapy,我已经编写了一个程序,从网上删除一些数据,如下所示 import scrapy class JPItem(scrapy.Item): question_content = scrapy.Field() best_answer = scrapy.Field() class JPSpider(scrapy.Spider): name = "jp" allowed_domains = ['chiebukuro.yahoo.co.jp'] def start_requests(self):

我已经编写了一个程序,从网上删除一些数据,如下所示

import scrapy

class JPItem(scrapy.Item):
question_content = scrapy.Field()
best_answer = scrapy.Field()

class JPSpider(scrapy.Spider):

name = "jp"
allowed_domains = ['chiebukuro.yahoo.co.jp']

def start_requests(self):
    url = 'https://chiebukuro.yahoo.co.jp/dir/list.php?did=2078297790&flg=1&sort=3&type=list&year=2004&month=1&day=1&page=1'
    yield scrapy.Request(url, self.parse)

def parse(self, response):

    if str(response.css("div.qa-list small::text").extract()) == '条件に一致する質問はみつかりませんでした。':
        for y in range (2004,2007):
            for m in range (1,13):
                for d in range(1,32):
                    url = 'https://chiebukuro.yahoo.co.jp/dir/list.php?did=2078297790&flg=1&sort=3&type=list&year='+ str(y) + '&month=' + str(m) + '&day=' + str(d) +'&page=1';
                    yield scrapy.Request(url, self.parse)

    else:
        for i in range(0,40):
            url = response.xpath('//ul[@id="qalst"]/li/dl/dt/a/@href')[i].extract()
            yield scrapy.Request(url, self.parse_info)
        next_page = response.css("div.qa-list p.flip a.next::attr(href)").extract_first()
        if next_page is not None:
            yield scrapy.Request(next_page, self.parse)             

def parse_info(self, response):
    item = JPItem()

    item['question_content'] = "\"" + ''.join(response.css("div.mdPstdQstn div.ptsQes p:not([class])").extract() + response.css("div.mdPstdQstn div.ptsQes p.queTxt::text").extract()).replace("\n","\\n").replace("\r","\\r").replace("\t","\\t").replace("<p>","").replace("</p>","").replace("<br>","") + "\""
    item['best_answer'] = "\"" + ''.join(response.css("div.mdPstdBA div.ptsQes p.queTxt::text").extract() + response.css("div.mdPstdBA div.ptsQes p:not([class])").extract()).replace("\n","\\n").replace("\r","\\r").replace("\t","\\t").replace("<p>","").replace("</p>","") + "\""

    yield item
import scrapy
类别JPItem(刮痕项目):
问题内容=scrapy.Field()
最佳答案=scrapy.Field()
等级JPSpider(刮毛蜘蛛):
name=“jp”
允许的_域=['chiebukuro.yahoo.co.jp']
def start_请求(自我):
url='1〕https://chiebukuro.yahoo.co.jp/dir/list.php?did=2078297790&flg=1&sort=3&type=list&year=2004&month=1&day=1&page=1'
生成scrapy.Request(url、self.parse)
def解析(自我,响应):
如果str(response.css(“div.qa-list small::text”).extract())=='条件に一致する質問はみつかりませんでした。':
对于范围内的y(20042007):
对于范围(1,13)内的m:
对于范围(1,32)内的d:
url='1〕https://chiebukuro.yahoo.co.jp/dir/list.php?did=2078297790&flg=1&sort=3&type=list&year=“+str(y)+”&月=“+str(m)+”&日=“+str(d)+”&页=1”;
生成scrapy.Request(url、self.parse)
其他:
对于范围(0,40)内的i:
url=response.xpath('//ul[@id=“qalst”]/li/dl/dt/a/@href')[i].extract()
生成scrapy.Request(url、self.parse_info)
next_page=response.css(“div.qa-list p.flip a.next::attr(href)”).extract_first()
如果下一页不是“无”:
生成scrapy.Request(下一页,self.parse)
def解析_信息(自我,响应):
item=JPItem()
条目['question\u content']=“\”“+”.join(response.css(“div.mdPstdQstn div.ptsQes p:not([class]).extract()+response.css(“div.mdPstdQstn div.ptsQes p.queTxt::text”).extract()。替换(“\n”,“\\n”)。替换(“\r”,“\\r”)。替换(“\t>)。替换(“,”)。替换(,“,”)。替换(
,“,”) item['best_answer']=“\”“+”.join(response.css(“div.mdPstdBA div.ptsQes p.queTxt::text”).extract()+response.css(“div.mdPstdBA div.ptsQes p:not([class]).extract()。replace(“\n”,“\\n”)。replace(“\r”,“\\r”)。replace(“\t”,“\\t”)。replace(,”)。replace(

,“+”) 收益项目
我发现这条线应该有问题

if str(response.css(“div.qa-list small::text”).extract())== '条件に一致する質問はみつかりませんでした。':

因为当我运行程序时,它无法检测到这种情况,即使提取的测试应该与所述的相同,它也会跳到Else条件。我曾尝试使用.encode(“utf-8”),但似乎无法解决问题。有没有人能就这个问题提供一些建议

非常感谢。

如前所述,您在这里试图做的是将列表与字符串进行比较,这在逻辑上是不正确的,并且总是返回
False
。因此,提供的选项是将字符串与以下内容进行比较:

  • response.css(“div.qa-list small::text”).extract_first()
    它给出了第一个提取的元素(这里是一个字符串),这是首选的方式,因为使用extract_first()可以避免索引器,并且在找不到任何与选择匹配的元素时返回
    None
  • 由于extract()返回一个列表,只需执行
    response.css(“div.qa-list small::text”)。extract[0]
    将起作用并提供第一个元素
  • 如果您得到一个包含多个字符串的列表,并且希望将所有文本放在一起并对其执行一些操作,那么将所有文本转换为单个字符串的简单方法是执行
    '.join(response.css(“div.qa-list small::text”)

在您的例子中,使用第1种方法是合适的,并且不必担心utf-8转换,因为python将在内部处理这些转换

尝试
if response.css(“div.qa-list small::text”)。首先提取_()条件に一致する質問はみつかりませんでした。':@paultrmbrth刚刚试过。它起作用了@paultrmbrth它工作得很好!谢谢