if 声明在 scrapy yield
if statement in scrapy yield
如何在 yield{} 部分添加 if 语句,请参阅下面代码底部的 Fight_Url 部分
基本上如果结果部分说接下来我需要它只是不寻找 url
import pandas as pd
import scrapy
urls_csv = pd.read_csv('fighters.csv')
urls_list = urls_csv.url.to_list()
class FightersDetailsSpider(scrapy.Spider):
name = "fight_urls"
def start_requests(self):
links = []
for link in urls_list:
links.append(link)
for url in links:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response, **kwargs):
for fight_url in response.xpath('//*[@class="b-fight-details__table-body"]//tr')[1:]:
yield {
'Url': response.request.url,
'Result': fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip(),
'First_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[0],
'Last_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[1],
'Opponent_First': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[0],
'Opponent_Last': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[1],
'Opponent_URL': fight_url.xpath('.//td[2]/p[2]/a/@href').extract_first(),
'Fight_Url':
if fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip() == "next":
None
else:
fight_url.xpath('.//@href').extract_first(),
}
只需要稍微修改if-else
语法:
for fight_url in response.xpath('//*[@class="b-fight-details__table-body"]//tr')[1:]:
yield {
'Url': response.request.url,
'Result': fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip(),
'First_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[0],
'Last_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[1],
'Opponent_First': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[0],
'Opponent_Last': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[1],
'Opponent_URL': fight_url.xpath('.//td[2]/p[2]/a/@href').extract_first(),
'Fight_Url':
None if fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip() == "next"
else fight_url.xpath('.//@href').extract_first(),
}
如何在 yield{} 部分添加 if 语句,请参阅下面代码底部的 Fight_Url 部分
基本上如果结果部分说接下来我需要它只是不寻找 url
import pandas as pd
import scrapy
urls_csv = pd.read_csv('fighters.csv')
urls_list = urls_csv.url.to_list()
class FightersDetailsSpider(scrapy.Spider):
name = "fight_urls"
def start_requests(self):
links = []
for link in urls_list:
links.append(link)
for url in links:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response, **kwargs):
for fight_url in response.xpath('//*[@class="b-fight-details__table-body"]//tr')[1:]:
yield {
'Url': response.request.url,
'Result': fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip(),
'First_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[0],
'Last_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[1],
'Opponent_First': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[0],
'Opponent_Last': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[1],
'Opponent_URL': fight_url.xpath('.//td[2]/p[2]/a/@href').extract_first(),
'Fight_Url':
if fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip() == "next":
None
else:
fight_url.xpath('.//@href').extract_first(),
}
只需要稍微修改if-else
语法:
for fight_url in response.xpath('//*[@class="b-fight-details__table-body"]//tr')[1:]:
yield {
'Url': response.request.url,
'Result': fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip(),
'First_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[0],
'Last_Name': fight_url.xpath('.//td[2]/p[1]/a/text()').extract_first().strip().split()[1],
'Opponent_First': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[0],
'Opponent_Last': fight_url.xpath('.//td[2]/p[2]/a/text()').extract_first().strip().split()[1],
'Opponent_URL': fight_url.xpath('.//td[2]/p[2]/a/@href').extract_first(),
'Fight_Url':
None if fight_url.xpath('.//td[1]/p/a/i/i/text()').extract_first().strip() == "next"
else fight_url.xpath('.//@href').extract_first(),
}