爬取汽车之家问答详情页数据

爬取汽车之家问答详情页数据

爬取步骤如下:

1.确定首页目标的url
2.发送请求,得到详情页的url
3.再次发送请求,获取响应得到详情页的数据
4.解析详情页数据
5.保存数据

爬取方式:

通过首页url发送请求,得到详情页的url,再次发送请求,获取响应,从而得到详情页的目的数据。

本次案例目的:

介绍如何根据首页的url,爬取详情页对应的url以及详情页的数据。

一,找到主页的url:

在这里插入图片描述

二,在首页里找到问答的问题和详情页的url对应的xpath语法:

在这里插入图片描述
细心的朋友会发现,我们通过xpath找到的详情页的url并不是完整的,因此我们在对详情页发送请求时,需要对详情页的url进行手动拼接。
在这里插入图片描述

思路清晰之后,就开始上我们的代码:

注意:这是通过首页获取详情页的url,然后再次发送请求,在详情页中获取我们的目的数据。

import requests
from lxml import etree
import json

if __name__ == '__main__':
    # 确认目标的url
    url = 'https://wenda.autohome.com.cn/'
    # 构造请求头参数
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
    }
    # 发送请求,获取响应
    response = requests.get(url,headers=headers)
    # 数据类型为html
    str_data = response.text
    # 将数据转化成py数据
    py_data = etree.HTML(str_data)
    # 提取数据
    question_list = py_data.xpath('//h4/a/text()')
    url_list = py_data.xpath('//h4/a/@href')
    # 由于详情页的url都属不完整的,因此,需要通过手动拼接
    answer_list = []
    for i in url_list:
        detail_url = 'https://wenda.autohome.com.cn'+i
        detail_response = requests.get(detail_url,headers=headers)
        # 数据类型为html
        detail_data = detail_response.text
        py_detail_data = etree.HTML(detail_data)
        # 提取目标数据
        answer = py_detail_data.xpath('//div[@class="ahe__area ahe__block ahe__text"]/p/text()')
        # 获取回答为一个列表数据,因此需要将列表拼接起来
        answer_ = ''.join(answer)
        answer_list.append(answer_)
    for i in range(len(question_list)):
        dict_ = {}
        dict_[question_list[i]] = answer_list[i]
        # 将数据转换成json格式
        json_data = json.dumps(dict_,ensure_ascii=False)+',\n'
        # 保存到本地
        with open('汽车之家问答.json','a',encoding='utf-8')as f:
            f.write(json_data)

爬取结果如下:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值