Я сейчас опробоваюсь. Я попробовал код примера на странице http://doc.scrapy.org/en/1.0/intro/overview.html. Я попытался извлечь последние вопросы с тегом «bigdata». Все работало хорошо. Но когда я пытался извлекать вопросы с помощью «bigdata» тегов и «python», результаты были неверными, и в результате возникали только теги «bigdata». Но в браузере я правильно задаю вопросы с обоими тегами. Вы можете найти код ниже:Scrapy сканирование stackoverflow вопросы, соответствующие нескольким тегам
import scrapy
class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow'
start_urls = ['https://stackoverflow.com/questions/tagged/bigdata?page=1&sort=newest&pagesize=50']
def parse(self, response):
for href in response.css('.question-summary h3 a::attr(href)'):
full_url = response.urljoin(href.extract())
yield scrapy.Request(full_url, callback=self.parse_question)
def parse_question(self, response):
yield {
'title': response.css('h1 a::text').extract()[0],
'votes': response.css('.question .vote-count-post::text').extract()[0],
'body': response.css('.question .post-text').extract()[0],
'tags': response.css('.question .post-tag::text').extract(),
'link': response.url,
}
Когда я изменяю start_urls в
start_urls = [ 'https://stackoverflow.com/questions/tagged/bigdata+python?page=1&sort=newest&pagesize=50']
результаты содержат вопросы с единственным тегом 'bigdata. Как получить вопросы только с тегами?
Редактировать: Я думаю, что происходит то, что scrapy идет на страницы с тегами 'bigdata' с главной страницы, которую я дал, потому что теги являются ссылками на главную страницу этого тега. Как я могу отредактировать этот код, чтобы сделать scrapy не вдаваться в страницы тегов и только вопросы на этой странице? Я пробовал использовать такие правила, как показано ниже, но результаты все еще не правильные.
rules = (Rule(LinkExtractor(restrict_css='.question-summary h3 a::attr(href)'), callback='parse_question'),)
Спасибо. Это сработало отлично. –