Я пытаюсь построить скребок с помощью Scrapy и пытаюсь вернуть желаемый текст.Любая помощь будет принята с благодарностью.
Вот мой код:
import scrapy
from scrapy.spiders import Request
from scrapy.linkextractors import LinkExtractor
from scrapy.http import HtmlResponse
import re
from urllib import *
BASE_URL = 'http://murderpedia.org/'
PROTOCOL = 'https:'
Вот мой класс предметов
class CornFlakeItem(scrapy.Item):
name = scrapy.Field()
bio = scrapy.Field()
images = scrapy.Field()
link = scrapy.Field()
image_urls = scrapy.Field()
bio_image = scrapy.Field()
image_paths = scrapy.Field()
classification = scrapy.Field()
characteristics = scrapy.Field()
number_of_victims = scrapy.Field()
date_of_murders = scrapy.Field()
date_of_birth = scrapy.Field()
victims_profile = scrapy.Field()
method_of_murder = scrapy.Field()
location = scrapy.Field()
status = scrapy.Field()
Вот мой био класс:
class CornFlakeBio(scrapy.Spider):
name = 'corn-flake-killers'
start_urls = ['http://murderpedia.org/male.A/index.A.htm']
Вот моя функция разбора:
def parse(self, response):
table=
response.xpath('//td[contains(font//font/text(),
"Victims")]/../..')
urls = table.xpath('//a/@href').extract()
for url in urls:
if (url.startswith('mailto:')):
yield None
else:
yield Request(response.urljoin(url), self.parse_person)
Вот моя функция разбора:
def parse_person(self, response):
table = response.xpath('//*[@id="table4"]')
for row in table.xpath('//tbody'):
text = {
'Classification' :
row.xpath('//tr[3]/td/style/text()').extract_first(),
'Characteristics':
row.xpath('//tr[4]/td/style/text()').extract_first(),
'Number of Victims' :
row.xpath('//tr[5]/td/style/text()').extract_first(),
'Date of Murders':
row.xpath('//tr[6]/td/style/text()').extract_first(),
'Date of Birth':
row.xpath('//tr[7]/td/style/text()').extract_first(),
'Victims Profile':
row.xpath('//tr[8]/td/style/text()').extract_first(),
'Method of Murder':
row.xpath('//tr[9]/td/style/text()').extract_first(),
'Location' :
row.xpath('//tr[10]/td/style/text()').extract_first(),
'Status' :
row.xpath('//tr[11]/td/style/text()').extract_first()}
text = ''.join(text)
print(text)[:10]
У меня такое чувство, что моя проблема заключается в xpath для каждого человекагрести, а может и нет?...
Любая помощь здесь будет очень признательна.
Вот основные моменты из моего обновленного файла журнала: