在不知道网页结构的情况下使用Scrapy抓取所有文本

UriCS

我正在进行一项与分发Internet索引相关的研究。

虽然存在多个此类项目(IRLbot,分布式索引,Cluster-Scrapy,Common-Crawl等),但我的项目更着重于激励此类行为。我正在寻找一种爬网真实网页的简单方法,而无需了解其URL或HTML结构以及:

  1. 提取所有文本(以便对其进行索引)
  2. 收集其所有URL并将其添加到URL中以进行爬网
  3. 如果网页格式不正确,可以防止崩溃并优雅地继续(即使没有刮擦的文本)

需要澄清的是-这仅用于概念验证(PoC),所以我不介意它无法缩放,速度慢等。在大多数情况下,我的目标是抓取呈现给用户的大部分文本,无论是否包含动态内容,并且具有很少的“垃圾”(例如功能,标签,关键字等)。开箱即用的简单工作局部解决方案优于需要大量专业知识才能部署的完美解决方案。

第二个问题是存储(URL,提取的文本)以供索引(通过不同的过程吗?),但是我认为自己可以通过更多的挖掘来弄清楚。

任何有关如何增强“其本身”的解析功能的建议将不胜感激!

import scrapy

from scrapy_1.tutorial.items import WebsiteItem


class FirstSpider(scrapy.Spider):
name = 'itsy'

# allowed_domains = ['dmoz.org'] 

start_urls = \
    [
        "http://www.stackoverflow.com"
    ]

# def parse(self, response):
#     filename = response.url.split("/")[-2] + '.html'
#     with open(filename, 'wb') as f:
#         f.write(response.body)

def parse(self, response):
    for sel in response.xpath('//ul/li'):
        item = WebsiteItem()
        item['title'] = sel.xpath('a/text()').extract()
        item['link'] = sel.xpath('a/@href').extract()
        item['body_text'] = sel.xpath('text()').extract()
        yield item

恐龙龙

您在这里寻找的是抓地力的CrawlSpider

CrawlSpider使您可以定义每个页面都遵循的爬网规则。它足够聪明,可以避免对不是网络资源的图像,文档和其他文件进行爬网,并且可以为您完成全部工作。

这是一个很好的示例,使用CrawlSpider可能会使您的蜘蛛看起来像:

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class MySpider(CrawlSpider):
    name = 'crawlspider'
    start_urls = ['http://scrapy.org']

    rules = (
        Rule(LinkExtractor(), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        item = dict()
        item['url'] = response.url
        item['title'] = response.meta['link_text']
        # extracting basic body
        item['body'] = '\n'.join(response.xpath('//text()').extract())
        # or better just save whole source
        item['source'] = response.body
        return item

这个蜘蛛会抓取它可以在网站上找到的每个网页,并记录标题,URL和全文。
对于文本主体,您可能希望以某种更聪明的方式提取它(以排除javascript和其他不需要的文本节点),但这是一个要讨论的问题。实际上,对于您所描述的内容,您可能想保存完整的html源代码,而不是仅保存文本,因为非结构化文本对于任何种类的分析或索引都没有用。

还有许多可针对此类爬网进行调整的scrapy设置。广泛抓取文档页面对此进行了很好的描述

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不知道所有属性的情况下从HTML标记中获取文本

来自分类Dev

Selenium:如何在不知道其id或name属性的情况下找到网页上的所有图像?

来自分类Dev

在不知道结构的情况下解组嵌套的json

来自分类Dev

如何在不知道列表大小的情况下使用redis-cli打印列表中的所有值?

来自分类Dev

在不知道其名称的情况下打印所有POST请求参数

来自分类Dev

在不知道包含节点的情况下从组中删除所有子级

来自分类Dev

Javascript在不知道所有键的情况下访问多维数组

来自分类Dev

如何在不知道元素的情况下循环所有XML属性

来自分类Dev

如何在不知道大小的情况下绘制matlab中的所有矩阵元素?

来自分类Dev

在不知道类型的情况下使用instanceof

来自分类Dev

在不知道EditText ID的情况下使用addTextChangedListener

来自分类Dev

SQL:给定一条记录,如何在不知道层次结构中级别数的情况下查找其所有关联的子记录?

来自分类Dev

如何在不知道有多少项的情况下使用foreach遍历多维数组?

来自分类Dev

在不知道其结构的情况下在网页中显示Javascript对象

来自分类Dev

Delphi-JSON对象-如何在不知道属性名称的情况下迭代所有属性?

来自分类Dev

是否可以在不知道属性名称的情况下选择SQL中的所有XML属性?

来自分类Dev

如何在不知道类型的情况下将表的所有子项返回到列表?

来自分类Dev

在不知道类结构的情况下重载赋值运算符

来自分类Dev

在不知道xml文件结构的情况下解析xml文件内容

来自分类Dev

在不知道其结构的情况下显示React组件

来自分类Dev

在不知道确切结构的情况下计算大量嵌套的XmlNodes

来自分类Dev

如何在不知道名称的情况下访问结构成员?

来自分类Dev

在不知道结构的情况下用python读取二进制文件

来自分类Dev

在不知道 JSON 结构的情况下解析 Java 中的嵌套 JSON

来自分类Dev

如何在抓取首页之前不知道Cookie是什么的情况下通过抓取方式传递Cookie?

来自分类Dev

在不知道ID的情况下隐藏/显示文本框及其标签

来自分类Dev

Jsoup在不知道element标签的情况下提取给定文本的元素

来自分类Dev

在不知道ID的情况下进行更新

来自分类Dev

在不知道参数类型的情况下取反lambda?

Related 相关文章

  1. 1

    在不知道所有属性的情况下从HTML标记中获取文本

  2. 2

    Selenium:如何在不知道其id或name属性的情况下找到网页上的所有图像?

  3. 3

    在不知道结构的情况下解组嵌套的json

  4. 4

    如何在不知道列表大小的情况下使用redis-cli打印列表中的所有值?

  5. 5

    在不知道其名称的情况下打印所有POST请求参数

  6. 6

    在不知道包含节点的情况下从组中删除所有子级

  7. 7

    Javascript在不知道所有键的情况下访问多维数组

  8. 8

    如何在不知道元素的情况下循环所有XML属性

  9. 9

    如何在不知道大小的情况下绘制matlab中的所有矩阵元素?

  10. 10

    在不知道类型的情况下使用instanceof

  11. 11

    在不知道EditText ID的情况下使用addTextChangedListener

  12. 12

    SQL:给定一条记录,如何在不知道层次结构中级别数的情况下查找其所有关联的子记录?

  13. 13

    如何在不知道有多少项的情况下使用foreach遍历多维数组?

  14. 14

    在不知道其结构的情况下在网页中显示Javascript对象

  15. 15

    Delphi-JSON对象-如何在不知道属性名称的情况下迭代所有属性?

  16. 16

    是否可以在不知道属性名称的情况下选择SQL中的所有XML属性?

  17. 17

    如何在不知道类型的情况下将表的所有子项返回到列表?

  18. 18

    在不知道类结构的情况下重载赋值运算符

  19. 19

    在不知道xml文件结构的情况下解析xml文件内容

  20. 20

    在不知道其结构的情况下显示React组件

  21. 21

    在不知道确切结构的情况下计算大量嵌套的XmlNodes

  22. 22

    如何在不知道名称的情况下访问结构成员?

  23. 23

    在不知道结构的情况下用python读取二进制文件

  24. 24

    在不知道 JSON 结构的情况下解析 Java 中的嵌套 JSON

  25. 25

    如何在抓取首页之前不知道Cookie是什么的情况下通过抓取方式传递Cookie?

  26. 26

    在不知道ID的情况下隐藏/显示文本框及其标签

  27. 27

    Jsoup在不知道element标签的情况下提取给定文本的元素

  28. 28

    在不知道ID的情况下进行更新

  29. 29

    在不知道参数类型的情况下取反lambda?

热门标签

归档