我已设法使用以下程序提取一些数据。但是,当我检查提取数据结果时,我意识到如果内容中有url,我无法获取'question_content'中包含的href元素(url)。
import scrapy
class JPItem(scrapy.Item):
best_answer = scrapy.Field()
question_content = scrapy.Field()
question_title = scrapy.Field()
class JPSpider(scrapy.Spider):
name = "jp"
allowed_domains = ['detail.chiebukuro.yahoo.co.jp']
start_urls = [
'https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q' + str(x)
for x in range (12174460000,12174470000)
]
def parse(self, response):
item = JPItem()
item['question_title'] = response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ttl h1::text").extract_first()
item['question_content'] = ''.join([i for i in response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes p::text").extract()])
item['best_answer'] = ''.join([i for i in response.css("div.mdPstd.mdPstdBA.othrAns.clrfx div.ptsQes p.queTxt::text").extract()])
yield item
从图片中可以看出,有一个我无法以“:: text”格式捕获它的URL,但是如果省略“:: text”,则会获得其他不相关的数据和标签,例如, br,p。
如何在不包含br和p标签的情况下抓住该链接?
答案 0 :(得分:1)
试试这个新代码:
import scrapy
import re
class JPItem(scrapy.Item):
best_answer = scrapy.Field()
question_content = scrapy.Field()
question_title = scrapy.Field()
question_link = scrapy.Field()
class JPSpider(scrapy.Spider):
name = "jp"
allowed_domains = ['detail.chiebukuro.yahoo.co.jp']
start_urls = [
'https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12174467757?__ysp=VVNC',
]
def parse(self, response):
item = JPItem()
item['question_title'] = response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ttl h1::text").extract_first()
item['question_content'] = re.sub('[\s+]', '', ''.join([i for i in response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes p::text").extract()]))
item['question_link'] = ''.join(response.css("div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes p:not([class]) a::text").extract())
item['best_answer'] = re.sub('[\s+]', '', ''.join([i for i in response.css("div.mdPstd.mdPstdBA.othrAns.clrfx div.ptsQes p.queTxt::text").extract()]))
yield item
输出可以给你:
'question_content':'USBについての質問です下記のサイトの通りCentOS7を1USBからインストールしようと思うのですが、USBに焼くとそのUSBは今まで通りに使えなくなってしまうのでしょうか...?(データを出し入れしたり)教えてください~!'
'question_link': u'https://www.skyarch.net/blog/?p=6382'
答案 1 :(得分:0)
尝试提取问题包装器的文本及其所有后代的文本:
wrapper_selector = "div.mdPstd.mdPstdQstn.sttsRslvd.clrfx div.ptsQes"
item['question_content'] = ''.join([i for i in response.css('{}::text, {} *::text'.format(wrapper_selector)).extract()])