qq_45370403 2019-07-06 23:25 采纳率: 0%
浏览 6613

python网络爬虫遇到空值如何处理

爬取58同城招聘信息是xpath遇到空值。无法继续爬取。

import requests  #导入requests库
from lxml import etree#导入lxml库
import csv#输出文件类型
import time#时间函数

def spider():
    headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'}#定义头部
    pre_url = 'https://hc.58.com/job/pn'#构造URL
    for x in range(1,2):#使用for循环构造前几页URL地址并GET请求
    html=requests.get(pre_url+str(x),headers=headers)
    time.sleep(2)#休眠时间
    selector = etree.HTML(html.text)#初始化etree
    job_list = selector.xpath("//*[@id='list_con']/li")#获取工作列表
    for job in job_list:
        dizhi = job.xpath("div[1]/div[1]/a/span[1]/text()")[0]#公司地址
        gongsi = job.xpath("div[2]/div[1]/a/text()")[0]#公司名称
        gangwei = job.xpath("div[2]/p/span[1]/text()")[0]#所需岗位
        leixing = job.xpath("div[1]/div[1]/a/span[2]/text()")[0]#人员类型
        xueli = job.xpath("div[2]/p/span[2]/text()")[0]#员工学历
        jingyan = job.xpath("div[2]/p/span[3]/text()")[0]#员工经验
        gongzi = job.xpath("div[1]/p/text()")[0]#员工工资
        daiyu = job.xpath("div[1]/div[2]/text()")[0]#福利待遇
         item = [dizhi, gongsi, gangwei,leixing, xueli, jingyan, gongzi,daiyu  ] #所要爬取的数据
        data_writer(item)#保存数据
        print('正在抓取', dizhi)

def data_writer(item):
    with open('581河池.csv', 'a',encoding='utf-8',newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(item)

if  __name__ == '__main__':#主函数
    spider()

图片说明图片说明

  • 写回答

7条回答

  • threenewbee 2019-07-07 09:28
    关注

    一个办法是用len首先对dishi gongsi等判断,是否是none或者长度是否>=1,然后再调用。
    一个办法是遇到异常直接忽略,继续执行
    代码如下:

    for...:
        try:
                #你现有的代码
        except OSError:
            pass
        continue
    
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器