栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【scrapy爬取不到tbody的问题以及保存数据为json格式】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【scrapy爬取不到tbody的问题以及保存数据为json格式】

scrapy用xpath爬取不到tbody的问题

这是因为tbody是Firefox和Chrome等浏览器自动添加的标记。
但是当使用Scrapy进行抓取时,tbody不在responseHTML中。

所以我们只要把xpath里的tbody删除即可正常爬取的数据

顺便写点scrapy的经验吧, 进入循环的xpath语句记得前面没有/这些东西, 直接按节点走,例如:第一个for循环是对末尾的div数组进行遍历, 然后第二层循环是对div数组里的div[2]/div/div[]数组进行遍历, 注意xpath格式。

for l in response.xpath('/html/body/div[4]/div/div'):
             for x in l.xpath('div[2]/div/div'):

xpth可以通过F12->复制->复制xpath很方便的得到。


这里spider虽然没用到但是参数必须加上否则会报错

保存数据为save.json格式的pipeline

class Test1Pipeline:

    def __init__(self):
        self.file = codecs.open('save.json', 'w+', encoding='utf-8')

    def open_spider(self, spider):
        self.file.write('[n')

    def process_item(self, item, spider):
        # # 读取item中的数据
        # line = json.dumps(item, ensure_ascii=False) + 'n'
        line = json.dumps(dict(item), ensure_ascii=False)
        self.file.write('t' + line + ',n')
        return item

    def close_spider(self, spider):
        #定位到最后一个多余的逗号
        self.file.seek(-2, os.SEEK_END)
        #删除逗号及后面的东西
        self.file.truncate()
        #加上换行和]
        self.file.write('n]')
        #关闭
        self.file.close()

注意json只能有一对{}, 多个{}可以放入list保存

可以通过设置具体响应头, 模拟登录, 使用池设置爬取间隔等方式来避免反爬

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号