我正在尝试使用Scrapy for Python编写一个刮刀。此时,我正在尝试获取网页的名称以及页面中的所有出站链接。输出应该是这样的字典
{'link': [u'Link1'], 'title': [u'Page title']}
我创建了这段代码:
from scrapy.spider import Spider
from scrapy import Selector
from socialmedia.items import SocialMediaItem
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['title'] = link.xpath('text()').extract()
item['link'] = link.xpath('@href').extract()
items.append(item)
yield items
有人能帮助我得到这个结果吗? 我已经修改了此页面中的代码http://mherman.org/blog/2012/11/05/scraping-web-pages-with-scrapy/
在没有弃用功能的情况下更新代码。 非常感谢你!
达尼
答案 0 :(得分:2)
如果我理解正确,您希望迭代所有链接并提取链接和标题。
通过a
xpath获取所有//a
代码,然后提取text()
和@href
:
def parse(self, response):
for link in response.xpath("//a"):
item = SocialMediaItem()
item['title'] = link.xpath('text()').extract()
item['link'] = link.xpath('@href').extract()
yield item
这会产生:
{'link': [u'#mw-navigation'], 'title': [u'navigation']}
{'link': [u'#p-search'], 'title': [u'search']}
...
{'link': [u'/wiki/Internet_forum'], 'title': [u'Internet forums']}
...
另外,请注意Scrapy内置了Link Extractors
:
LinkExtractors是唯一目的是从中提取链接的对象 网页(scrapy.http.Response对象)将最终 接着