首先打开职业集网页,选择人气公司招聘排名中的字节跳动公司,点开招聘选项,发现下面有各种各样的招聘信息,此时随着不断地往下点击,如果跳转到评论中的第二页,会发现上面的地址栏发生变化
对应的网址改为p2,猜想应该为page2,这个网站应该为静态网站。
看source当中有没有相应的内容,如果能够查找到就是静态网站,无法查找到就是动态网站,Network为浏览网页时向服务器发送的请求。
爬虫主要就是发送信息和接受信息的过程,模拟浏览器的操作
运行相应的程序
import requests
url = 'https://www.jobui.com/company/10375749/jobs/p1/'
resp = requests.get(url)
print(resp.text)
返回403,说明爬虫被发现了,
如果想要对于后续的公司进行查找的时候,如果每次都通过修改网址来修改程序,就把程序写死了,中间网址的参数(公司的编号)不一样,
所以只需要修改编号,就可以换成不同的公司,网址中公司的id是可变的,公司的页数是可变的,封装成一个函数,固定不变的作函数体,可变的作函数的参数。
使用BeautifulSoup进行文本的解析
发现这些内容都在h3对应的标签之中
找寻一下共有多少个相应的标签
爬取对应网站的两页数据
import requests
from bs4 import BeautifulSoup #用于解析和提取数据
def send_request(id,page):
url = 'https://www.jobui.com/company/{0}/jobs/p{1}/'.format(id,page)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}
resp = requests.get(url,headers = headers)
print(resp.text)
#通过resp.text获取服务器返回的数据
return resp.text
def pares_html(html): #html是从服务器端响应回来的数据(内容)
#BeautifulSoup作用:解析和提取数据,bs的类型为bs4.BeautifulSoup类型,可以使用对象
#中的方法进行数据的提取
bs = BeautifulSoup(html,'html.parser') #得到BeautifulSoup的对象
job_lst = bs.find_all('div',class_='c-job-list') #得到包含职位的div---15个
for item in job_lst: #分别遍历每一个职位数据,每一个item就是一个c-job-list
name = item.find('h3').text
#只想要标签里面的内容的时候,后面加上一个text函数
print(name)
def start(id,pages):
for page in range(pages):
resp_data = send_request(id,page) #发送请求
pares_html(resp_data) #启动爬虫程序
if __name__ == "__main__":
id = '10375749'
pages = 2
start(id,pages)
爬取网页对应的两页信息(字节跳动公司)
接下来我们还想爬取工作地点以及工作要求的相应内容,通过网页查看相应的标签
发现职位描述查找对应的信息,职位描述的对应信息在job-desc对应的两个span中,所以用一个数组分别存储两个span的对应内容
import requests
from bs4 import BeautifulSoup #用于解析和提取数据
def send_request(id,page):
url = 'https://www.jobui.com/company/{0}/jobs/p{1}/'.format(id,page)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}
resp = requests.get(url,headers = headers)
print(resp.text)
#通过resp.text获取服务器返回的数据
return resp.text
def pares_html(html): #html是从服务器端响应回来的数据(内容)
#BeautifulSoup作用:解析和提取数据,bs的类型为bs4.BeautifulSoup类型,可以使用对象
#中的方法进行数据的提取
bs = BeautifulSoup(html,'html.parser') #得到BeautifulSoup的对象
job_lst = bs.find_all('div',class_='c-job-list') #得到包含职位的div---15个
for item in job_lst: #分别遍历每一个职位数据,每一个item就是一个c-job-list
name = item.find('h3').text
#职位名称在h3标签里面,需要查找的是h3标签里面的内容,所以后面要加上text函数
div_tag = item.find('div',class_='job-desc')
span_tag = div_tag.find_all('span')
#有两个对应的span内容,所以分别将其打印出来
print(name,span_tag[0].text,span_tag[1].text)
def start(id,pages):
for page in range(pages):
resp_data = send_request(id,page) #发送请求
pares_html(resp_data) #启动爬虫程序
if __name__ == "__main__":
id = '10375749'
pages = 2
start(id,pages)
具体的要求需要点击对应的链接之后才能看到对应的工作要求以及岗位要求
职位具体的信息在对应的a标签之中
这个对应的a标签的特点为class=“job-name”,添加相应的url并打印之后,发现这个为相应的相对链接
import requests
from bs4 import BeautifulSoup #用于解析和提取数据
def send_request(id,page):
url = 'https://www.jobui.com/company/{0}/jobs/p{1}/'.format(id,page)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}
resp = requests.get(url,headers = headers)
print(resp.text)
#通过resp.text获取服务器返回的数据
return resp.text
def pares_html(html): #html是从服务器端响应回来的数据(内容)
#BeautifulSoup作用:解析和提取数据,bs的类型为bs4.BeautifulSoup类型,可以使用对象
#中的方法进行数据的提取
bs = BeautifulSoup(html,'html.parser') #得到BeautifulSoup的对象
job_lst = bs.find_all('div',class_='c-job-list') #得到包含职位的div---15个
for item in job_lst: #分别遍历每一个职位数据,每一个item就是一个c-job-list
name = item.find('h3').text
#职位名称在h3标签里面,需要查找的是h3标签里面的内容,所以后面要加上text函数
div_tag = item.find('div',class_='job-desc')
span_tag = div_tag.find_all('span')
#有两个对应的span内容,所以分别将其打印出来
url = item.find('a',class_ = 'job-name')['href'] #提取class样式为job-name的a标签,获取属性为href的值
print(name,span_tag[0].text,span_tag[1].text,url)
def start(id,pages):
for page in range(pages):
resp_data = send_request(id,page) #发送请求
pares_html(resp_data) #启动爬虫程序
if __name__ == "__main__":
id = '10375749'
pages = 2
start(id,pages)
这个对应的a标签的特点为class=“job-name”,添加相应的url并打印之后,发现这个为相应的相对链接
此时需要使用字符串的拼接,把它拼接成为一个完整的内容
import requests
from bs4 import BeautifulSoup #用于解析和提取数据
def send_request(id,page):
url = 'https://www.jobui.com/company/{0}/jobs/p{1}/'.format(id,page)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}
resp = requests.get(url,headers = headers)
print(resp.text)
#通过resp.text获取服务器返回的数据
return resp.text
def pares_html(html): #html是从服务器端响应回来的数据(内容)
#BeautifulSoup作用:解析和提取数据,bs的类型为bs4.BeautifulSoup类型,可以使用对象
#中的方法进行数据的提取
bs = BeautifulSoup(html,'html.parser') #得到BeautifulSoup的对象
job_lst = bs.find_all('div',class_='c-job-list') #得到包含职位的div---15个
for item in job_lst: #分别遍历每一个职位数据,每一个item就是一个c-job-list
name = item.find('h3').text
#职位名称在h3标签里面,需要查找的是h3标签里面的内容,所以后面要加上text函数
div_tag = item.find('div',class_='job-desc')
span_tag = div_tag.find_all('span')
#有两个对应的span内容,所以分别将其打印出来
url = item.find('a',class_ = 'job-name')['href'] #提取class样式为job-name的a标签,获取属性为href的值
print(name,span_tag[0].text,span_tag[1].text,'https://www.jobui.com'+url)
#剩下的就是来做数据的保存
def start(id,pages):
for page in range(pages):
resp_data = send_request(id,page) #发送请求
pares_html(resp_data) #启动爬虫程序
if __name__ == "__main__":
id = '10375749'
pages = 2
start(id,pages)