资讯专栏INFORMATION COLUMN

Python 爬虫-模拟登录知乎-爬取拉勾网职位信息

joyvw / 2287人阅读

摘要:本文代码地址爬取豆瓣电影爬取拉勾网职位信息模拟登陆知乎为什么没人给我点赞。职位名职位信息运行结果模拟登录知乎通过开发者工具,获取的数据。

我开通了公众号【智能制造专栏】,以后技术类文章会发在专栏。
用Python写爬虫是很方便的,最近看了xlzd.me的文章,他的文章写的很到位,提供了很好的思路。因为他的文章部分代码省略了。下面是基于他的文章的三个代码片段:
基于Python3,Python2的话需要修改下input输入函数和print的用法。本文github代码地址

爬取豆瓣电影top250

爬取拉勾网职位信息

模拟登陆知乎

为什么没人给我点赞。?!

有些代码做了更改。其中把获取的数据存储到excel中。关于存取数据到excel可以看我的另一篇文章:。

用到的库

requests

Beautiful Soup

openpyxl

1. 爬取豆瓣电影top250,存到excel表格中
#!/usr/bin/env python
# encoding=utf-8
import requests,re
import codecs
from bs4 import BeautifulSoup
from openpyxl import Workbook
wb = Workbook()
dest_filename = "电影.xlsx"
ws1 = wb.active  
ws1.title = "电影top250"

DOWNLOAD_URL = "http://movie.douban.com/top250/"

def download_page(url):
    """获取url地址页面内容"""
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36"
    }
    data = requests.get(url, headers=headers).content
    return data


def get_li(doc):
    soup = BeautifulSoup(doc, "html.parser")
    ol = soup.find("ol", class_="grid_view")
    name = [] #名字
    star_con = [] #评价人数
    score = []  #评分
    info_list = []  #短评
    for i in ol.find_all("li"):
        detail = i.find("div", attrs={"class": "hd"})
        movie_name = detail.find("span", attrs={"class": "title"}).get_text() #电影名字
        level_star = i.find("span",attrs={"class":"rating_num"}).get_text() #评分
        star = i.find("div",attrs={"class":"star"})
        star_num = star.find(text=re.compile("评价"))  #评价

        info = i.find("span",attrs={"class":"inq"})  #短评
        if info:     #判断是否有短评
            info_list.append(info.get_text())
        else:
            info_list.append("无")
        score.append(level_star)
        

        name.append(movie_name)
        star_con.append(star_num)
    page = soup.find("span", attrs={"class": "next"}).find("a") #获取下一页
    if page:
        return name,star_con,score,info_list,DOWNLOAD_URL + page["href"]
    return name,star_con,score,info_list,None


def main():
    url = DOWNLOAD_URL
    name = []
    star_con=[]
    score = []
    info = []
    while url:
        doc = download_page(url)
        movie,star,level_num,info_list,url = get_li(doc)
        name = name + movie
        star_con = star_con + star
        score = score+level_num
        info = info+ info_list
    for (i,m,o,p) in zip(name,star_con,score,info):
        col_A = "A%s"%(name.index(i)+1)
        col_B = "B%s"%(name.index(i)+1)
        col_C = "C%s"%(name.index(i)+1)
        col_D = "D%s"%(name.index(i)+1)
        ws1[col_A]=i
        ws1[col_B] = m
        ws1[col_C] = o
        ws1[col_D] = p
    wb.save(filename=dest_filename)

if __name__ == "__main__":
    main()

结果如下:

2. 爬取拉勾网Python职位信息

职位信息存储在json中,获取到json对象,再从中遍历出公司名、地址、待遇等信息。

import requests
from openpyxl import Workbook

def get_json(url, page, lang_name):
    data = {"first": "true", "pn": page, "kd": lang_name}
    json = requests.post(url, data).json()
    list_con = json["content"]["positionResult"]["result"]
    info_list = []
    for i in list_con:
        info = []
        info.append(i["companyShortName"])
        info.append(i["companyName"])
        info.append(i["salary"])
        info.append(i["city"])
        info.append(i["education"])
        info_list.append(info)
    return info_list


def main():
    lang_name = input("职位名:")
    page = 1
    url = "http://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"
    info_result = []
    while page < 31:
        info = get_json(url, page, lang_name)
        info_result = info_result + info
        page += 1
    wb = Workbook()
    ws1 = wb.active
    ws1.title = lang_name
    for row in info_result:
        ws1.append(row)
    wb.save("职位信息.xlsx")

if __name__ == "__main__":
    main()

运行结果:

3. 模拟登录知乎

通过开发者工具,获取post的数据。

import requests,time
from bs4 import BeautifulSoup
def get_captcha(data):
    with open("captcha.gif","wb") as fp:
        fp.write(data)
    return input("输入验证码:")

def login(username,password,oncaptcha):
    sessiona = requests.Session()
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"}
    _xsrf = BeautifulSoup(sessiona.get("https://www.zhihu.com/#signin",headers=headers).content,"html.parser").find("input",attrs={"name":"_xsrf"}).get("value")
    captcha_content = sessiona.get("https://www.zhihu.com/captcha.gif?r=%d&type=login"%(time.time()*1000),headers=headers).content
    data = {
        "_xsrf":_xsrf,
        "email":username,
        "password":password,
        "remember_me":True,
        "captcha":oncaptcha(captcha_content)
    }
    resp = sessiona.post("https://www.zhihu.com/login/email",data,headers=headers).content
    print(resp)
    return resp 

if __name__ == "__main__":
    login("your_email","your_password",get_captcha)

运行后会在运行目录下得到验证码图片:

输入验证码后得到如下响应结果表明登录成功。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38007.html

相关文章

  • node爬取勾网数据并导出为excel文件

    摘要:前言之前断断续续学习了,今天就拿拉勾网练练手,顺便通过数据了解了解最近的招聘行情哈方面算是萌新一个吧,希望可以和大家共同学习和进步。 前言 之前断断续续学习了node.js,今天就拿拉勾网练练手,顺便通过数据了解了解最近的招聘行情哈!node方面算是萌新一个吧,希望可以和大家共同学习和进步。 一、概要 我们首先需要明确具体的需求: 可以通过node index 城市 职位来爬取相关信...

    dkzwm 评论0 收藏0
  • 使用php 爬取勾网 的php 招聘信息~

    摘要:拉勾网的爬虫还是有一定的难度的所以我们今天就爬取试一下其实并没有太大的难度只要我们用好分析一下请求就会其实没有什么难度上代码亲测可用拉钩代码 拉勾网的爬虫还是有一定的难度的 所以我们今天就爬取试一下 其实并没有太大的难度 只要我们用好network 分析一下请求 就会其实没有什么难度 上代码 2019-05-22 亲测可用 拉钩代码

    CoderDock 评论0 收藏0
  • 区块链招聘信息爬取与分析

    摘要:最近在研究区块链,闲来无事抓取了拉勾网上条区块链相关的招聘信息。拉勾网的反爬虫做的还是比较好的,毕竟自己也知道这种做招聘信息聚合的网站很容易被爬,而且比起妹子图这种网站,开发的技术水平应该高不少。 最近在研究区块链,闲来无事抓取了拉勾网上450条区块链相关的招聘信息。过程及结果如下。 拉勾网爬取 首先是从拉勾网爬取数据,用的requests库。拉勾网的反爬虫做的还是比较好的,毕竟自己也...

    kelvinlee 评论0 收藏0
  • Python爬虫利器二之Beautiful Soup的用法

    摘要:官方解释如下提供一些简单的式的函数用来处理导航搜索修改分析树等功能。废话不多说,我们来试一下吧安装目前已经停止开发,推荐在现在的项目中使用,不过它已经被移植到了,也就是说导入时我们需要。 上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Be...

    cjie 评论0 收藏0
  • Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗

    摘要:然后准备再去抓下拉勾网的招聘数据,这也是个相对优秀的专业招聘网站了,数据也相当多,想当初找实习找正式工作,都是在这两个上找的,其他的网站几乎都没看。 原文地址:http://www.jtahstu.com/blog/s... Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗 零、致谢 感谢BOSS直聘相对权威的招聘信息,使本人有了这次比较有意思的研究之旅。 由于爬虫持续...

    zhkai 评论0 收藏0

发表评论

0条评论

joyvw

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<