【发布时间】:2017-08-04 07:33:09
【问题描述】:
我是 python 和 scrapy 的新手。 我正在尝试抓取种子网址https://www.health.com/patients/status/.This 种子网址包含许多网址。但我只想从种子 url 中获取包含 Faci/Details/#somenumber 的 url。url 如下所示:
https://www.health.com/patients/status/ ->https://www.health.com/Faci/Details/2
-> https://www.health.com/Faci/Details/3
-> https://www.health.com/Faci/Details/4
https://www.health.com/Faci/Details/2 -> https://www.health.com/provi/details/64
-> https://www.health.com/provi/details/65
https://www.health.com/Faci/Details/3 -> https://www.health.com/provi/details/70
-> https://www.health.com/provi/details/71
在每个https://www.health.com/Faci/Details/2 页面内都有https://www.health.com/provi/details/64 https://www.health.com/provi/details/65 ....最后我想从中获取一些数据 https://www.health.com/provi/details/#somenumber url.我怎样才能达到同样的效果?
到目前为止,我已经尝试了以下来自 scrapy 教程的代码,并且只能抓取包含 https://www.health.com/Faci/Details/#somenumber 的网址。它不会到达 https://www.health.com/provi/details/#somenumber 。我试图在 settings.py 文件中设置深度限制。但它没有没用。
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from news.items import NewsItem
class MySpider(CrawlSpider):
name = 'provdetails.com'
allowed_domains = ['health.com']
start_urls = ['https://www.health.com/patients/status/']
rules = (
Rule(LinkExtractor(allow=('/Faci/Details/\d+', )), follow=True),
Rule(LinkExtractor(allow=('/provi/details/\d+', )),callback='parse_item'),
)
def parse_item(self, response):
self.logger.info('Hi, this is an item page! %s', response.url)
item = NewsItem()
item['id'] = response.xpath("//title/text()").extract()
item['name'] = response.xpath("//title/text()").extract()
item['description'] = response.css('p.introduction::text').extract()
filename='details.txt'
with open(filename, 'wb') as f:
f.write(item)
self.log('Saved file %s' % filename)
return item
请帮我继续下一步?
【问题讨论】:
标签: python-2.7 web-scraping scrapy web-crawler scrapy-spider