Python网络爬虫并存入数据库

爬取前程无忧招聘网站十万条招聘信息并存入数据库

1.首先导入本次需要用到的包

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&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=')
    count += 1 #网页计数自增
    p = re.findall(r"window.__SEARCH_RESULT__ =.*?</script>", 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跳出
​

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>