2

このサイトから代理店の電話番号をクロールしようとしています:

リスト表示 http://www.authoradvance.com/agencies/

詳細ビュー http://www.authoradvance.com/agencies/b-personal-management/

電話番号は詳細ページに隠されています。

では、上記の詳細ビュー URL のような URL を持つ Web サイトにアクセスして、電話番号をクロールすることは可能ですか?

このコードでの私の試みは次のとおりです。

from scrapy.item import Item, Field

class AgencyItem(Item):
    Phone = Field()

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from agentquery.items import AgencyItem


class AgencySpider(CrawlSpider):
   name = "agency"
   allowed_domains = ["authoradvance.com"]
   start_urls = ["http://www.authoradvance.com/agencies/"]
   rules = (Rule(SgmlLinkExtractor(allow=[r'agencies/*$']), callback='parse_item'),)

   def parse_item(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select("//div[@class='section-content']")
       items = []
       for site in sites:
           item = AgencyItem()
           item['Phone'] = site.select('div[@class="phone"]/text()').extract()
           items.append(item)
       return(items)

次に、「スクレイピー クロール エージェンシー -o items.csv -t csv」を実行すると、結果は 0 ページをクロールしました。

どうしたの?事前にご協力いただきありがとうございます。

4

1 に答える 1

3

agencies/*$ページには、正規表現 ( )を満たすリンクが 1 つだけあります。

stav@maia:~$ scrapy shell http://www.authoradvance.com/agencies/
2013-04-24 13:14:13-0500 [scrapy] INFO: Scrapy 0.17.0 started (bot: scrapybot)

>>> SgmlLinkExtractor(allow=[r'agencies/*$']).extract_links(response)
[Link(url='http://www.authoradvance.com/agencies', text=u'Agencies', fragment='', nofollow=False)]

これは itself への単なるリンクであり、section-contentクラスを持つ div はありません:

>>> fetch('http://www.authoradvance.com/agencies')
2013-04-24 13:15:22-0500 [default] DEBUG: Crawled (200) <GET http://www.authoradvance.com/agencies> (referer: None)

>>> hxs.select("//div[@class='section-content']")
[]

したがって、ループは繰り返されitemsず、追加されません。

したがって、正規表現を次のように変更します/agencies/.+

>>> len(SgmlLinkExtractor(allow=[r'/agencies/.+']).extract_links(response))
20

>>> fetch('http://www.authoradvance.com/agencies/agency-group')
2013-04-24 13:25:02-0500 [default] DEBUG: Crawled (200) <GET http://www.authoradvance.com/agencies/agency-group> (referer: None)

>>> hxs.select("//div[@class='section-content']")
[<HtmlXPathSelector xpath="//div[@class='section-content']" data=u'<div
class="section-content">\n\t      <di'>, <HtmlXPathSelector xpath="//div
[@class='section-content']" data=u'<div class="section-content"><div class='>]
于 2013-04-24T18:28:38.330 に答える