и BeatifulSoup, чтобы загрузить вторую страницу вручную, извлечь эту информацию самостоятельно и сохранить ее как часть элемента. Да, гораздо больше неприятностей, чем при обычном синтаксическом анализе, но он должен выполнять работу с наименьшими хлопотами.
я есть вопрос о том, как сделать это в скрапе. У меня есть паук, который ползет по списку страниц предметов. Каждый раз, когда найдена страница листинга с элементами, существует обратный вызов parse_item (), который вызывается для извлечения данных элементов и получения элементов. Пока все хорошо, все отлично работает.
Но у каждого элемента есть, помимо прочего, URL-адрес с более подробной информацией об этом элементе. Я хочу следовать этому URL и сохранить в другом поле элемента (url_contents) извлеченное содержимое URL этого элемента.
И я не уверен, как организовать код для достижения этой цели, поскольку две ссылки (ссылка на списки и одна ссылка на конкретный элемент) следуют по-разному, а обратные вызовы вызываются в разное время, но я должен сопоставить их при обработке одного и того же элемента ,
Мой код до сих пор выглядит так:
class MySpider(CrawlSpider):
name = "example.com"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/?q=example",
]
rules = (
Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('item\/detail', )), follow = False),
)
def parse_item(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//h2[@class="title"]'
sub_selectors = main_selector.select(xpath)
for sel in sub_selectors:
item = ExampleItem()
l = ExampleLoader(item = item, selector = sel)
l.add_xpath('title', 'a[@title]/@title')
......
yield l.load_item()