python - 使用 Scrapy 从网页的子链接中收集诗歌并将其放入 .txt 文件中
问题描述
我正在尝试从该站点http://amediavoz.com/上的“Índice general alfabético”类别下收集所有诗歌。那里出现了诗歌的标题,人们必须点击它才能找到实际的诗歌。基本上我想从这些页面中的每一个复制每首诗的所有文本(每个页面中的<p></p>
xpath "/html/body/blockquote[2]/blockquote" 下的文本),除了关于这首诗的结尾信息<i></i>
在HTML 代码。我想将所有内容保存在 .txt 文件中,要么一个大的,要么每页一个。
这段代码试图做到这一点。
import scrapy
class FirstSpider(scrapy.Spider):
name = "FirstSpider"
start_urls = ['http://amediavoz.com/']
def start_requests(self):
url = ['http://amediavoz.com/']
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
xp = "//a[@target='_blank']/@href"
for url in response.xpath(xp).extract():
page = response.url.split("/")[-2]
filename = 'Poems=%s.txt' % page
sub = url.css('blockquote')[1]
with open(filename, 'wb') as f:
f.write(sub.xpath('//font/text()').extract())
self.log('Saved file %s' % filename)
f.close()
当我运行代码时,我没有收到任何错误消息,但也没有输出,即文本文件。
任何帮助表示赞赏。
解决方案
抱歉,我不懂西班牙语。我只是粗略地提取文字,不一定对。如果你能标出需要从HTML中提取哪些数据,我会帮你修改代码。
from simplified_scrapy.spider import Spider, SimplifiedDoc
class FirstSpider(Spider):
name = 'FirstSpider'
start_urls = ['http://amediavoz.com/']
refresh_urls = True
def extract(self, url, html, models, modelNames):
try:
doc = SimplifiedDoc(html)
if url['url']==self.start_urls[0]:
lstA = doc.listA(url=url['url'],start='blockquote',end='La voz de los poetas')
return [{"Urls":lstA}]
blockquotes = doc.getElementsByTag('blockquote')
page = url['url'].split("/")[-1]
filename = 'data/Poems=%s.txt' % page
with open(filename, 'w') as f:
for blockquote in blockquotes:
f.write(blockquote.getText('\n'))
f.write('\n')
print ('Saved file %s' % filename)
return True
except Exception as e:
print ('extract',e)
from simplified_scrapy.simplified_main import SimplifiedMain
SimplifiedMain.startThread(FirstSpider())# start scrapping
推荐阅读
- excel - I'm receiving a "compile error: Can't assign to read-only property" I am not sure what the issue is, can anyone see the problem? seems to be line 6
- google-tag-manager - GTM - Only Click DataLayer elements are available whereas I need a Trigger on a Load Element
- shell - 如何将 shell 脚本的所有输出写入单个新文件
- devexpress - 如何使用 iframe 登录 Google 帐户
- javascript - javascript中的十六进制到rgb转换器
- sql - 如何通过在SQL中多次出现的字符将字符串分开
- javascript - 自动触发点击按钮Javascript
- javascript - NodeJS等待/异步使数据检索同步
- angular - ngx translate 是否能够基于 SQLesque `LIKE` 比较或至少 string.startsWith() 类型比较匹配键?
- mysql - 生成的列“UserCode”不能引用自增列。核心