如何抓取多个网站并使用纯文本创建文本文件

时间:2016-08-21 17:20:49

标签: python scrapy web-crawler

我开始了一个新项目,我使用python scrapy进行了新的开发。 我试图浏览多个网站并从中获取纯文本。之后我想用原始文本创建一个文本文件。

这是我的代码。也许你可以帮助我并给我一些提示,例如:我可以从同一个网站上阅读其他链接。

import scrapy


class ForenSpider(scrapy.Spider):

    name = "foren"

    allowed_domains = ["dmoz.org", "pijamassurf.com", "indeed.com"]
    start_urls = [
         "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
         "http://www.dmoz.org/Computers/Programming/Languages/Python"]

    def parse(self, response):

        hxs = HtmlXPathSelector(response)
        data = hxs.select('//body//text()').extract()

        with open('data', 'rw+') as f:
            for item in data:
                f.writelines(str(data))

2 个答案:

答案 0 :(得分:0)

我使用 BeautifulSoup 来获取parsedHtml,这就是我从当前html页面检索html链接的方式。

parsedHtml = BeautifulSoup(htmlSource, "lxml")
for href in parsedHtml.find_all('a'):
    linkedUrl = href.get('href')

答案 1 :(得分:0)

请考虑从same page扩展一个后续示例。例如:

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/", ]

    def parse(self, response):
        for href in response.css("ul.directory.dir-col > li > a::attr('href')"):
            url = response.urljoin(href.extract())
            yield scrapy.Request(url, callback=self.parse_dir_contents)

    def parse_dir_contents(self, response):
        yield  {
            "link": response.url,
            "body": " ".join(filter(None, map(unicode.strip, response.xpath('//body//text()').extract()))),
            "links": response.css("a::attr('href')").extract()
        }

请注意,与现在打开和关闭每个项目的文件相比,这将消耗更少的资源。我不确定它们是否真正意味着它不仅仅是开始学习本教程的调试步骤。