不知道~- 2023-02-18 16:57 采纳率: 54.2%
浏览 23
已结题

完善代码将用xpath获取的数据保存到csv中

需求:1:数据保存csv中 格式正确

img

2# 福利信息每项用 # 分隔)保存到D://新闻列表.csv文件中。

# 岗位信息,地区,工作,经验,学历,福利。
import requests


def gethtml(url):
    header = {
        'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'

    }
    res = requests.get(url, headers=header)
    return res.text
    # print(res.text)


from lxml import etree


def getParse(url):
    tree = gethtml(url)
    html = etree.HTML(tree)
    d_i = html.xpath('//*[@id="area"]/div[4]//div')
    for i in d_i:
        # 福利信息每项用  # 分隔)保存到D://新闻列表.csv文件中。
        # print(i)
        information = i.xpath('./div[1]/a/img/@alt')
        gw=[]

        for j in information:
            # print(j)
            gz = i.xpath("./div[2]/div[1]/a/text()")
            diqu = i.xpath("normalize-space(./div[2]/div[1]/span/text())")
            qian = i.xpath("./div[2]/p/span[1]/text()")
            jinyan = i.xpath("./div[2]/p/span[2]/text()")
            xl = i.xpath("./div[2]/p/span[2]/span/text()")
            fuli = i.xpath("./div[2]/ul//li/text()")
            # fuli = i.xpath("./div[2]/ul//li/text()").replace(',','#') TODO 实现不了
            print(j, diqu, gz, qian, jinyan, fuli)
            dit = {
                '岗位信息': j,
                '地区': diqu,
                '工作': gz,
                '经验,学历': jinyan,
                '福利': fuli
            }
            import csv
            f = open("./新闻列表.csv", 'a', encoding='utf-8', newline='')
            csv_writer = csv.DictWriter(f, fieldnames=['岗位信息', '地区', '工作', '经验,学历', '福利'])
            csv_writer.writeheader()
            csv_writer.writerow(dit)



getParse("http://www.pjob.net/china.htm")


  • 写回答

3条回答 默认 最新

  • qq_46161207 2023-02-18 17:43
    关注

    以下是修改后的代码,将岗位信息、地区、工作、经验和学历以及福利信息保存到CSV文件中。注意,使用CSVWriter写入数据时应在程序启动时只写入一次表头。

    
    import requests
    import csv
    
    def gethtml(url):
        header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
        }
        res = requests.get(url, headers=header)
        return res.text
    
    
    from lxml import etree
    
    def getParse(url):
        tree = gethtml(url)
        html = etree.HTML(tree)
        d_i = html.xpath('//*[@id="area"]/div[4]//div')
        with open("D://新闻列表.csv", 'w', encoding='utf-8', newline='') as f:
            csv_writer = csv.writer(f)
            csv_writer.writerow(['岗位信息', '地区', '工作', '经验,学历', '福利'])
        for i in d_i:
            information = i.xpath('./div[1]/a/img/@alt')
            gw=[]
            for j in information:
                gz = i.xpath("./div[2]/div[1]/a/text()")
                diqu = i.xpath("normalize-space(./div[2]/div[1]/span/text())")
                qian = i.xpath("./div[2]/p/span[1]/text()")
                jinyan = i.xpath("./div[2]/p/span[2]/text()")
                xl = i.xpath("./div[2]/p/span[2]/span/text()")
                fuli = i.xpath("./div[2]/ul//li/text()")
                dit = {
                    '岗位信息': j,
                    '地区': diqu,
                    '工作': gz,
                    '经验,学历': jinyan,
                    '福利': '#'.join(fuli)
                }
                with open("D://新闻列表.csv", 'a', encoding='utf-8', newline='') as f:
                    csv_writer = csv.DictWriter(f, fieldnames=['岗位信息', '地区', '工作', '经验,学历', '福利'])
                    csv_writer.writerow(dit)
    
    getParse("http://www.pjob.net/china.htm")
    

    在上面的代码中,我们将CSV文件的存储路径设置为"D://新闻列表.csv",可以根据需要自定义存储路径。在程序启动时,我们只写入一次表头。在循环中,将每一行的数据保存到字典中,然后使用CSVWriter将其写入CSV文件。在写入时,我们使用'#'.join(fuli)将福利信息转换为以#号分隔的字符串,并将其写入CSV文件中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵