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保存
可以通过设置具体响应头, 模拟登录, 使用池设置爬取间隔等方式来避免反爬
在使用Scrapy爬虫时遇到tbody元素无法抓取的问题,原因在于tbody是浏览器自动添加的,实际响应HTML中并不存在。解决方法是删除xpath中的tbody部分。此外,分享了Scrapy的XPath使用经验,强调在循环中避免使用绝对路径,并介绍了如何通过Chrome获取XPath。同时,文章提到了Scrapy保存数据为JSON格式的pipeline,注意JSON文件中数据结构的组织,并讨论了模拟登录、设置爬取间隔等反爬策略。

4838

被折叠的 条评论
为什么被折叠?



