如何抓取多个网站,并创建一个纯文本文本文件



我开始了一个新的项目,我是新的使用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))

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

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

请考虑扩展同一页面后面的一个示例。例如:

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()
        }

请注意,这将比您现在所做的为每个项目打开和关闭文件更少的资源密集。

最新更新