Scrapy で収集しているデータに問題があります。ターミナルでこのコードを実行すると、収集された情報はすべて次のような 1 つの項目に追加されるようです。
{"fax": ["Fax: 617-638-4905", "Fax: 925-969-1795", "Fax: 913-327-1491", "Fax: 507-281-0291", "Fax: 509-547-1265", "Fax: 310-437-0585"],
"title": ["Challenges in Musculoskeletal Rehabilitation", "17th Annual Spring Conference on Pediatric Emergencies", "19th Annual Association of Professors of Human & Medical Genetics (APHMG) Workshop & Special Interest Groups Meetings", "2013 AMSSM 22nd Annual Meeting", "61st Annual Meeting of Pacific Coast Reproductive Society (PCRS)", "Contraceptive Technology Conference 25th Anniversary", "Mid-America Orthopaedic Association 2013 Meeting", "Pain Management", "Peripheral Vascular Access Ultrasound", "SAGES 2013 / ISLCRS 8th International Congress"], ... ...
...など
問題は、各フィールドのスクレイピングされたすべての情報が 1 つの項目になってしまうことです。別のアイテムとして出てくる情報が必要です。つまり、各タイトルを1 つのファックス番号 (存在する場合)、1 つの場所などに関連付ける必要があります。
収集された各情報は他の情報と特定の関係を持っているため、すべての情報をグループ化して表示したくありません。最終的にデータベースに入力する方法は、次のようなものです。
"MedEconItem" 1: [タイトル: "タイトル 1 をここに挿入", ファックス: "ファックス番号 1 をここに挿入", 場所: "場所 1"... ]
"MedEconItem" 2: [タイトル: "タイトル 2", ファックス: "ファックス # 2", 場所: "場所 2" ... ]
"MedEconItem" 3: [...など
この問題にアプローチする方法について何か考えはありますか? この情報を簡単に分離する方法を知っている人はいますか? Scrapy を使用するのはこれが初めてなので、アドバイスは大歓迎です。私はどこでも検索してきましたが、答えが見つからないようです。
現在、私のコードは次のとおりです。
import scrapy
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field
class MedEconItem(Item):
title = Field()
date = Field()
location = Field()
specialty = Field()
contact = Field()
phone = Field()
fax = Field()
email = Field()
url = Field()
class autoupdate(BaseSpider):
name = "medecon"
allowed_domains = ["www.doctorsreview.com"]
start_urls = [
"http://www.doctorsreview.com/meetings/search/?region=united-states&destination=all&specialty=all&start=YYYY-MM-DD&end=YYYY-MM-DD",
]
def serialize_field(self, field, name, value):
if field == '':
return super(MedEconItem, self).serialize_field(field, name, value)
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//html/body/div[@id="c"]/div[@id="meeting_results"]')
items = []
for site in sites:
item = MedEconItem()
item['title'] = site.select('//h3/a/text()').extract()
item['date'] = site.select('//p[@class = "dls"]/span[@class = "date"]/text()').extract()
item['location'] = site.select('//p[@class = "dls"]/span[@class = "location"]/a/text()').extract()
item['specialty'] = site.select('//p[@class = "dls"]/span[@class = "specialties"]/text()').extract()
item['contact'] = site.select('//p[@class = "contact"]/text()').extract()
item['phone'] = site.select('//p[@class = "phone"]/text()').extract()
item['fax'] = site.select('//p[@class = "fax"]/text()').extract()
item['email'] = site.select('//p[@class = "email"]/text()').extract()
item['url'] = site.select('//p[@class = "website"]/a/@href').extract()
items.append(item)
return item