我开始了一个新的项目,我是新的使用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()
}
请注意,这将比您现在所做的为每个项目打开和关闭文件更少的资源密集。