У меня возникла проблема, когда я анализировал веб-страницу с помощью скрапа, мой обычный метод не был вызван с помощью скрапа. URL-адрес: http://www.duilian360.com/chunjie/117.html, и код:
import scrapy
from shufa.items import DuilianItem
class DuilianSpiderSpider(scrapy.Spider):
name = 'duilian_spider'
start_urls = [
{"url": "http://www.duilian360.com/chunjie/117.html", "category_name": "春联", "group_name": "鼠年春联"},
]
base_url = 'http://www.duilian360.com'
def start_requests(self):
for topic in self.start_urls:
url = topic['url']
yield scrapy.Request(url=url)
def parse(self, response):
div_list = response.xpath("//div[@class='contentF']/div[@class='content_l']/p")
self.parse_paragraph(div_list)
def parse_paragraph(self, div_list):
for div in div_list:
duilian_text_list = div.xpath('./text()').extract()
for duilian_text in duilian_text_list:
duilian_item = DuilianItem()
duilian_item['category_id'] = 1
duilian = duilian_text
duilian_item['name'] = duilian
duilian_item['desc'] = ''
print('I reach here...')
yield duilian_item
В приведенном выше коде метод parse_paragraph
не вызывался, поскольку предложение print
не имеет вывода, я не могушаг в этот метод, даже когда я устанавливаю точку останова на строке печати.
Но если я переместлю весь код в методе parse_paragraph
в вызывающий метод parse_page
, как показано ниже, то все работает хорошо, почему?
# -*- coding: utf-8 -*-
import scrapy
from shufa.items import DuilianItem
class DuilianSpiderSpider(scrapy.Spider):
name = 'duilian_spider'
start_urls = [
{"url": "http://www.duilian360.com/chunjie/117.html", "category_name": "春联", "group_name": "鼠年春联"},
]
base_url = 'http://www.duilian360.com'
def start_requests(self):
for topic in self.start_urls:
url = topic['url']
yield scrapy.Request(url=url)
def parse(self, response):
div_list = response.xpath("//div[@class='contentF']/div[@class='content_l']/p")
for div in div_list:
duilian_text_list = div.xpath('./text()').extract()
for duilian_text in duilian_text_list:
duilian_item = DuilianItem()
duilian_item['category_id'] = 1
duilian = duilian_text
duilian_item['name'] = duilian
duilian_item['desc'] = ''
print('I reach here...')
yield duilian_item
# def parse_paragraph(self, div_list):
# for div in div_list:
# duilian_text_list = div.xpath('./text()').extract()
# for duilian_text in duilian_text_list:
# duilian_item = DuilianItem()
# duilian_item['category_id'] = 1
# duilian = duilian_text
# duilian_item['name'] = duilian
# duilian_item['desc'] = ''
# print('I reach here...')
# yield duilian_item
В моем коде есть много привычных методов, и я не хочу перемещать весь код в них в вызывающий метод. это не очень хорошая практика.