我有这段代码可以获取网页中的所有链接:
from scrapy.spider import Spider
from scrapy import Selector
from socialmedia.items import SocialMediaItem
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
class MySpider(Spider):
name = 'smm'
allowed_domains = ['*']
start_urls = ['http://en.wikipedia.org/wiki/Social_media']
def parse(self, response):
items = []
for link in response.xpath("//a"):
item = SocialMediaItem()
item['SourceTitle'] = link.xpath('/html/head/title').extract()
item['TargetTitle'] = link.xpath('text()').extract()
item['link'] = link.xpath('@href').extract()
items.append(item)
return items
我想做以下事情: 1)而不是获取所有链接,只获得出站的链接,或者至少只有那些带有http / s的startinf 2)按照出站链接 3)只有在元数据中包含一些关键字时才刮取下一个网页 4)对给定量的循环重复整个过程 有人可以帮忙吗? 干杯!
达尼
答案 0 :(得分:1)
我认为你可能正在寻找像scrapy的Rule和LinkExtractor这样的东西。
from scrapy.contrib.spiders import Rule
from scrapy.contrib.linkextractors import LinkExtractor
class MySpider(Spider):
name = 'smm'
allowed_domains = ['*']
start_urls = ['http://en.wikipedia.org/wiki/Social_media']
rules = (
Rule(LinkExtractor(restrict_paths=('//a[contains(., "http")]'), callback='pre_parse')
)
def pre_parse(self, response):
if keyword in response.body:
parse(response)
def parse(self, response):
这段代码是完全未经测试的,但只是给出了如何获取所有链接的想法,然后在完成解析之前检查关键字的后续页面。
祝你好运。