【Scrapy】确认xpath没问题但是爬取不到数据

如题,爬取爱彼迎首页时,返回的数据为空,即返回[]

    def parse(self, response):
        # self.logger.debug(response.body)
        print(type(response))
        print("===============")
        div_list = response.xpath('//main[@id="site-content"]//div[@class="gsgwcjk g14v8520 dir dir-ltr"]/div')
        # name = response.xpath('//div[@class="gsgwcjk g14v8520 dir dir-ltr"]/div[@class=" dir dir-ltr"]//div[@class="t1jojoys dir dir-ltr"]')
        print(div_list)

确认了xpath是没问题的,在浏览器输入相应的xpath是可以获取到想要的元素的:
爱彼迎首页
“print(”===============")"能执行,说明没有反爬,但是却没有获取到想要的div
可以看到返回了一个[]
也检查了没有遵守“君子协议”
在这里插入图片描述

**原因:**如果目标网站使用JavaScript来渲染页面内容,Scrapy默认情况下可能无法获取到动态生成的内容。
**验证:**在浏览器禁用JavaScript,观察页面是否会发生变化。方法:(以Edge浏览器示范)在浏览器中点开设置,搜索“站点权限”,找到“JavaScript",然后点进去,将”允许“的开关关掉。
在这里插入图片描述
在这里插入图片描述
禁用JavaScript之后,拿之前能爬取成功的当当网检验,可以看到禁用之后,还是可以看到图书信息的。但是爱彼迎的话就会显示不出房源信息,说明了爱彼迎的页面用了JavaScript渲染。所以才会爬取不到。
在这里插入图片描述
在这里插入图片描述
**解决:**可以用selenium进行爬取,笔者还没有试验过,待更新。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您解答这个问题。 首先,我们需要在项目的items.py文件中定义需要保存的数据字段,例如: ```python import scrapy class KaoyanItem(scrapy.Item): title = scrapy.Field() content = scrapy.Field() datetime = scrapy.Field() ``` 在代码中,我们定义了需要保存的三个字段,分别是"title"、"content"和"datetime"。 接下来,在Spider中实现xpath翻页爬取数据保存。具体代码如下: ```python import scrapy from ..items import KaoyanItem class KaoyanSpider(scrapy.Spider): name = 'kaoyan_spider' allowed_domains = ['kaoyan.com'] start_urls = ['https://www.kaoyan.com/news/'] def parse(self, response): # 实现xpath爬取 data = response.xpath("你需要爬取数据xpath表达式") # 处理爬取到的数据 for item in data: kaoyan_item = KaoyanItem() kaoyan_item["title"] = item.xpath("标题的xpath表达式").get() kaoyan_item["content"] = item.xpath("内容的xpath表达式").get() kaoyan_item["datetime"] = item.xpath("发布时间的xpath表达式").get() yield kaoyan_item # 实现翻页 next_page = response.xpath("下一页的xpath表达式").get() if next_page: next_url = response.urljoin(next_page) yield scrapy.Request(next_url, callback=self.parse) ``` 在代码中,我们使用items.py文件中定义的KaoyanItem类来保存爬取到的数据,并使用yield语句将数据传给管道进行保存。同时,我们也实现了xpath翻页爬取。 接下来,我们需要配置管道来将数据保存到csv文件中。在项目的settings.py文件中添加以下配置: ```python FEED_FORMAT = "csv" FEED_URI = "data.csv" FEED_EXPORT_FIELDS = ["title", "content", "datetime"] ``` 在配置中,我们将数据保存的格式设置为csv,并指定保存路径为"data.csv"。同时,我们还指定了需要保存的字段,即"title"、"content"和"datetime"。 最后,启动虫并执行命令`scrapy crawl kaoyan_spider`,即可开始爬取和保存数据。 需要注意的是,虫需要遵守网站的虫规则,不要过度频繁地请求网站。同时,对于数据的处理和保存方式,需要根据具体情况进行选择和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值