python – Scrapy:存储所有外部链接并抓取所有内部链接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Scrapy:存储所有外部链接并抓取所有内部链接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1786字,纯文字阅读大概需要3分钟。
内容图文
![python – Scrapy:存储所有外部链接并抓取所有内部链接](/upload/InfoBanner/zyjiaocheng/824/c8e4000698184fb2ab14111afec58755.jpg)
我一直在研究一个scrapy web scraper,它从一个开始URL抓取所有内部链接,只收集scrapy的外部链接.但是,我的主要问题是对外部链接和内部链接进行分类.例如,当我尝试使用link.startswith(“http”)或link.startswith(“ftp”)或link.startswith(“www”)过滤外部链接时,如果网站使用绝对路径链接其自己的网站(www.my-domain.com/about而不是/ about)然后,它会将其归类为外部链接,即使它不是.以下是我的代码:
import scrapy
from lab_relationship.items import Links
class WebSpider(scrapy.Spider):
name = "web"
allowed_domains = ["my-domain.com"]
start_urls = (
'www.my-domain.com',
)
def parse(self, response):
""" finds all external links"""
items = []
for link in set(response.xpath('//a/@href').extract()):
item = Links()
if len(link) > 1:
if link.startswith("/") or link.startswith("."):
# internal link
url = response.urljoin(link)
item['internal'] = url
#yield scrapy.Request(url, self.parse)
elif link.startswith("http") or link.startswith("ftp") or link.startswith("www"):
# external link
item['external'] = link
else:
# misc. links: mailto, id (#)
item['misc'] = link
items.append(item)
return items
有什么建议?
解决方法:
实例化时,您必须通过允许的域.您不必担心指定所需的标记,因为(根据文档)参数标记默认采用(‘a’,’area’).
在Rust lang网站的例子中,打印来自其域的所有内部链接的代码如下所示:
import scrapy
from scrapy.linkextractors import LinkExtractor
class RustSpider(scrapy.Spider):
name = "rust"
allowed_domains = ["www.rust-lang.org"]
start_urls = (
'http://www.rust-lang.org/',
)
def parse(self, response):
extractor = LinkExtractor(allow_domains='rust-lang.org')
links = extractor.extract_links(response)
for link in links:
print link.url
输出将是这样的链接的列表:https://doc.rust-lang.org/nightly/reference.html(我不能发布更多),同时排除像StackOverflow那样的所有链接.
请务必查看文档页面,因为链接提取器有许多您可能需要的参数.
内容总结
以上是互联网集市为您收集整理的python – Scrapy:存储所有外部链接并抓取所有内部链接全部内容,希望文章能够帮你解决python – Scrapy:存储所有外部链接并抓取所有内部链接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。