Как я могу создать список из тега p? - PullRequest
0 голосов
/ 29 ноября 2018

Пожалуйста, проверьте сайт:

https://www.americanberkshire.com/california.html

есть все в теге p

Я хочу отделиться от каждого элемента, но я могу найти эффективный способ

# -*- coding: utf-8 -*-
import scrapy


class AmericanberkshireSpider(scrapy.Spider):
    name = 'americanberkshire'
    allowed_domains = ['americanberkshire.com']
    start_urls = ['https://www.americanberkshire.com/california.html']

    def parse(self, response):
        lists=

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
def parse(self, response):
    for red_paragraph in response.xpath('//p[re:test(text(), "\([A-Z]{3,}\)")]'):
        paragraphs = [red_paragraph]
        for paragraph in red_paragraph.xpath('./following-sibling::p'):
            if not paragraph.xpath('string(.)').extract_first().strip():
                break
            paragraphs.append(paragraph)
        # In each iteration reaching here, paragraphs will contain a list of
        # related paragraphs.
0 голосов
/ 29 ноября 2018

Возможно, если вы используете xpath 2.0, вы можете использовать регулярные выражения в селекторе, например //p[matches(text(),'[\w\s]+\([\w+]\)','i')].Или попробуйте выполнить итерацию следующим образом (не точный код, просто пример):

for sel in response.css('p'):
    txt = sel.css('::text').get()
    if not txt or not re.match('[\w\s]+\([\w+]\)', txt):
         continue
    # do what you need with selector sel
...