import json #网页可能使用json写的数据 import re #正则表达式 import pymysql #导入mysql等下需要连接数据库存储爬虫数据 import requests #导入请求包,获取网页 from bs4 import BeautifulSoup #网页源码解析器2.进行爬虫
#数据库存储的 *** 作可以在爬虫之后进行(可先看第二部分爬虫) cur = pymysql.connect(user='', password="", host='', database='') #连接数据库,ctrl+p可以查看需要的参数。 def save(update_time, positon_name, salary, job, company_type, company_name, company_size, attribute, workarea):#定义一个save函数传入所需参数 cursor = cur.cursor()#游标 sql = f"insert into lhlqianchengwuyou (update_time,positon_name, salary,job, company_type, company_name, company_size, attribute, workarea) values ('{update_time}','{positon_name}','{salary}','{job}','{company_type}','{company_name}','{company_size}','{attribute}','{workarea}')" #sql插入语句 # *** 作捕捉异常,如果没有异常则继续执行,如若有则抛出异常 try: cursor.execute(sql)#执行sql语句 cur.commit()#提交至数据库 except Exception as e: print(e) print(sql) #爬虫部分 a = 1#定义一个变量后面需要用到,变量根据网页上面所需参数定义(可在后面 *** 作) #首先封装一个函数来获取网页链接这样后面就只需要调用了 #传入参数url #函数内定义一个变量,用requests.get取到这个网页,一点点的去试,看需要传入什么头部信息才可以取到网页源码 def get_url(url): s = requests.get( url, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36' } ) return s.text #分析网页,发现网页属于json类型的爬虫,所以直接去取到网页源码,不需要用到解析,所以之前封装中没有用到解析 count = 0 #计数,每次爬取完一个网页记一个数,方便查看爬虫进度 while a < 2001: #分析发现每次换一页只会改变其中一个参数,所以定义一个变量a,a小于网页总页数(网页总共2000页,当然也可以使用while=True),当a大于2001时跳出循环(记得url中一定要加f不然变量不会生效) url = get_url( f'https://search.51job.com/list/000000,000000,0000,32,9,99,+,2,{a}.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=') count += 1 #网页计数自增 p = re.findall(r"window.__SEARCH_RESULT__ =.*?", url)[0][27:-9] #用正则表达式找到需要的值,可以直接取值然后用'.*?'表示匹配任意字符到下一个符合条件的字符,最后再用数据尾部结尾。 #数组取出第0项,再用切片切掉不要的数据 #循环取值 #需要用到json.loads()函数,它是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典) for i in json.loads(p)['engine_jds']: positon_name = i['job_name'] update_time = i["updatedate"] salary = i["providesalary_text"] workarea = i["workarea_text"] company_type = i["companytype_text"] company_size = i["companysize_text"] job = i["jobwelf"] attribute = i["attribute_text"][1] company_name = i["company_name"] print(update_time, positon_name, salary, job, company_type, company_name, company_size, attribute, workarea)#打印出是否取到值 save(update_time, positon_name, salary, job, company_type, company_name, company_size, attribute, workarea)#调用前面定义的save函数,将数据写入数据库 print(count) #打印计数 a += 1 #不断循环自增,直到2001跳出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)