美文网首页
突发奇想地总结1.正则2018-11-01

突发奇想地总结1.正则2018-11-01

作者: 研小生 | 来源:发表于2018-11-02 08:45 被阅读0次

    https://xiaoyuan.zhaopin.com/full/jobs
    直接复制审查的内容,或者html

    1. 我们需要找到一个合适的网址,例如:https://xiaoyuan.zhaopin.com/full/jobs ,审查之后在源代码找到相应的位置,最好是一行的源代码,不进行跨行的。
      image.png
    2. 方格类型,不是椭圆类型,椭圆类型源代码跨行需要在python语句后面增加内容,后面进行补充。


      image.png

      2.1 对比看出结果


      image.png
    3. 找的元素不是义务加载的,以下


      image.png
    4. 在使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而如果网站有反爬虫的想法的话,必然会拒绝这样的连接。而修改headers可以将自己的爬虫脚本伪装成浏览器的正常访问,来避免这一问题。
      5.re.S的作用
      https://www.jb51.net/article/146384.htm
      作者:Tank丶Farmer
      链接:https://www.jianshu.com/p/97b081534d7e
      來源:简书
      简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    5. 正则表达式中,“.”的作用是匹配除“\n”以外的任何字符,也就是说,它是在一行中进行匹配。这里的“行”是以“\n”进行区分的。a字符串有每行的末尾有一个“\n”,不过它不可见。
      如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。

    第一次程序

    import requests
    import re
    
    headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    
    url=url='https://xiaoyuan.zhaopin.com/full/jobs'
    
    https://xiaoyuan.zhaopin.com/full/jobs'
    res = requests.get(url,headers=headers)
    names=re.findall('<p class="searchResultCompanyname"><span>(.*?)</span></p>',res.text)
    places=re.findall('<span>城市:<em class="searchResultJobCityval">(.*?)</em></span>',res.text)
    peoples=re.findall('<span>人数:<em class="searchResultJobPeopnum">(.*?)</em></span>',res.text)
    types=re.findall('<span>公司类型:<em>(.*?)</em></span>',res.text)
    print(name,place,people,type)
    
    

    一.正则

    1. 首先引入库
    import requests     
    import re           #正则库
    import csv         #保存csv文件调用的库
    
    1. 写入headers,防止封掉IP
    headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    
    1. 输入爬取的地址url,并且用res,可以自定义红色位置,def功能与后面存入csv联系起来用。单纯输出不需要定义函数。


      image.png
    url='https://xiaoyuan.zhaopin.com/full/jobs'
    res = requests.get(url,headers=headers)
    
    1. 审查之后,找到爬取的代码,copy html,在源代码中找到,一步一输出,判断查找的是否正确,。


      yi'bu'yi'shu'chu

    一、 引入存入csv功能

    1. 在上述基础上定义函数,并对以下内容进行缩进


      image.png
    2. 加入for循环,使用writer.writerow,
        types=re.findall('<span>公司类型:<em>(.*?)</em></span>',res.text)
        for name,place,people,type in zip(names,places,peoples,types):
            print(name,place,people,type)
            writer.writerow([name,place,people,type])
    
    image.png
    1. 加入以下内容,并对url进行改动,或者删除注释部分,在下面重新添加,但是添加的网址需要能够显示换页功能,即右侧箭头指向。
    if __name__ == '__main__':
        fp = open('C:/Users/秦振凯/Desktop/text.csv', 'w', encoding='utf-8', newline='')
        writer = csv.writer(fp)
        writer.writerow(['name', 'place', 'people','type'])
        urls = ['https://xiaoyuan.zhaopin.com/full/jobs/0_0_0_0_0_-1_0_{}_0'.format(str(i)) for i in range(0, 60, 30)]
        for url in urls:
            get_info(url)
    
    image.png
    import requests
    import re
    import csv
    headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    
    # url='https://xiaoyuan.zhaopin.com/full/jobs'
    def get_info(url):
        res = requests.get(url,headers=headers)
        names=re.findall('<p class="searchResultCompanyname"><span>(.*?)</span></p>',res.text)
        places=re.findall('<span>城市:<em class="searchResultJobCityval">(.*?)</em></span>',res.text)
        peoples=re.findall('<span>人数:<em class="searchResultJobPeopnum">(.*?)</em></span>',res.text)
        types=re.findall('<span>公司类型:<em>(.*?)</em></span>',res.text)
        for name,place,people,type in zip(names,places,peoples,types):
            print(name,place,people,type)
            writer.writerow([name,place,people,type])
    
    if __name__ == '__main__':
        fp = open('C:/Users/秦振凯/Desktop/text.csv', 'w', encoding='utf-8', newline='')
        writer = csv.writer(fp)
        writer.writerow(['name', 'place', 'people','type'])
        urls = ['https://xiaoyuan.zhaopin.com/full/jobs/0_0_0_0_0_-1_0_{}_0'.format(str(i)) for i in range(0, 60, 30)]
        for url in urls:
            get_info(url)
    

    相关文章

      网友评论

          本文标题:突发奇想地总结1.正则2018-11-01

          本文链接:https://www.haomeiwen.com/subject/wokxxqtx.html