Mar*_*cus 5 python lxml scrapy python-2.7
我对Scrapy,Python和面向对象编程比较陌生,所以如果我的术语不正确或者不清楚,我会道歉.
我正在尝试编写一个蜘蛛,当它从响应中抓取项目时,也会创建一个修改版本的响应以保存到文件.例如,我正在尝试更改'src'链接以指向本地保存的已删除文件.
目前,我正在使用Scrapy的选择器抓取数据并使用lxml修改响应.但是,我想使用Scrapy的方法来代替lxml进行修改,因为使用Scrapy选择器和lxml意味着基本上将代码加倍以在响应中定位相同的元素.
我在下面添加了一些代码来说明我的观点.一切都发生在蜘蛛解析功能中.
def解析(自我,回应):
# Scrape thumbnail URLs using Scrapy selectors
for post in response.css('.post'): # For each post
for thumb in post.css('.thumb'): # For each thumbnail
item = Item() # Create an image item
item['thumbnail_url'] = []
item['thumbnail_savepath'] = []
for x in thumb.xpath('img/@src').extract():
thumbnail_url = 'https:' + x
thumbnail_filename = re.search('.*/(.*)', thumbnail_url).group(1)
thumbnail_savepath = 'thumbnails/' + thumbnail_filename
item['thumbnail_url'] += [thumbnail_url]
item['thumbnail_savepath'] += [thumbnail_savepath]
# Make modified html using lxml
body_lxml = lxml.html.document_fromstring(response.body)
for thumbnail in body_lxml.xpath('//img'):
thumbnail_src = thumbnail.get('src') # Original link address
thumbnail_path = './thumbnails/' + basename(thumbnail_src) # New link address
thumbnail.set('src',image_path) # Setting new link address
Run Code Online (Sandbox Code Playgroud)
如代码所示,它遍历图像以使用Scrapy选择器刮取项目,然后使用lxml第二次迭代以修改响应.我必须使用两种不同的方法来遍历相同的元素,我正试图避免.如果可能的话,我想在相同的for循环中进行抓取和修改.
我当时认为可以使用response.request()方法,但我很难理解如何在文档和在线搜索中使用它.是否有一些方法允许Scrapy修改响应中的单个元素或字段?任何帮助,将不胜感激.
谢谢.
我很困惑你想要实现的目标,你试图从选择器中进行修改,对吗?
我知道在回复中询问更多内容违反了溢出政策,但确实有些东西需要每周更新
仅查看代码,您似乎正在尝试连接来编辑您的项目。
所提到的两个然后“编辑”的生成器是什么最终输出正确吗?如果是这样,那么发生的情况是您无法隐式连接列表和字符串。
在这种情况下你要做的就是剥离然后加入并设置每个值...如果你或任何人有类似的东西,请提供可能相关的任何代码的完整示例...就像在这种情况下一样整个蜘蛛代码...和管道,即使原始海报没有使用一个,如果他希望保存的话,或者我总是可以只使用写入函数
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |