基于CrawlSpider,同一份代码爬取多个网站的数据,如果限制不爬取外链网站数据
来源:7-4 Rule和LinkExtractor使用
慕尼黑7546459
2020-08-27
老师, 我现在有这样一个需求:给定一批网站url(大概3000多个),对各个网站进行爬取全站的文本和图片。
我的实现:基于 CrawlSpider 实现,代码如下:`class LagouSpider(CrawlSpider):
name = ‘website’
# allowed_domains = ['www.u12group.com']
# start_urls = ['https://www.u12group.com']
allowed_domains = ['www.chemexpress.com']
start_urls = ['http://www.chemexpress.com/']
rules = (
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
def start_requests(self):
# TODO start_urls 从文件中读取
for start_url in self.start_urls:
return [scrapy.Request(url=start_url, dont_filter=True, )]
def parse_item(self, response):
item_loader = WebsiteItemLoader(item=WebsiteItem(), response=response)
item_loader.add_value("domain", extract_domain(response.url))
item_loader.add_value("url", response.url)
img_urls = response.xpath("//img/@src").extract()
item_loader.add_value("img_urls", self.get_img_url(response, img_urls))
item_loader.add_xpath("text", "/html/body//*")
item_loader.add_value("crawl_time", datetime.now())
job_item = item_loader.load_item()
return job_item
def get_img_url(self, response, img_urls):
return [parse.urljoin(response.url, url) for url in img_urls]`
问题:
1、在爬取每个网站的时候,怎么只爬取当前域名下的数据呢,因为有的网站外链了其他公司的网站,如果不做限制,就没完没了了。
2、因为有3000多个网站,不可能每个单独写一份代码,也就是没办法 通过allowed_domains 或 LinkExtractor(allowed_domains = xxx) 来控制
写回答
2回答
-
慕尼黑7546459
提问者
2020-08-29
11100 -
bobby
2020-08-29
allowed_domains配置成当前的网站 就不会去爬取其他网站了
每个网站的解析规则也是不一样的啊,那你是要将3000个网站的解析规则都放到一个文件中吗?
032020-08-30
相似问题