记录第一次使用Python爬虫

相当一段时间没有写过博客了,一是最近学习Java进度确实不快,而且习惯在笔记本上面记些笔记了,今天突然想写篇博客是因为这一周在进行大数据实训嘛,学的是Pyth语言,有一说一,当你写惯Java规范的可能比较繁琐的代码后,让你去写Python,你会觉得一时间难以适应,莫名奇妙就声明了类型,画了大括号和分号,但是其简单的特性又不禁让你感叹Python的强大。下面记录一下今天简单爬虫一个网站,是自己接触爬虫第一次爬到自己想看到的数据。

工具

  Python3.7,集成开发环境用的是Pycharm,Mysql版本是5.5.

爬虫

  当今是数据时代,我们可以通过网络爬虫来获取到我们想要的信息、数据,而python是热门的网络爬虫的语言(主要是实训要求)
总体来说爬虫的步骤分为URL管理器,网页下载器,网页解析器。

网页下载器用到两个库 urlib 和 requests。

解析器:正则表达式(模糊匹配)、Html.parser、BeautifulSoup、LXML,另外一种是用Xpath解析,在网站上可找出对应Xpath地址,利用lxml下面的etree进行解析。

最后我们将爬取到的数据存储到数据库中,持久化存储。

完整代码

import bs4
import pymysql
import requests

from openpyxl import Workbook

from com.cdut.DAY05 import config


def pageDown(URL):
    headers = {"user-agent" : "Google Chrome"}  # 伪装成浏览器
    response = requests.get(URL, headers=headers)
    response.encoding = "gbk"
    if response.status_code == 200:
        return response.text
    else:
        print("服务器没有响应")

#bs解析网页
def pageParse(page):
    # BeautifulSoup找的是节点
    soup = bs4.BeautifulSoup(page, "lxml")
    # 带有空格说明是父子从属关系
    jobList = soup.select("#resultList .el")  # 检索 id = resultList 下面 class = el 的子节点(id 是用 #号键)
    # select 返回的永远是数组
    JOB_List = []
    # 对于item是每一行,即对每一个子节点我们仍要筛选出每一列对应的数据
    for item in jobList[1:]:
        jobName = item.select(".t1")[0].get_text(strip = True)
        company = item.select(".t2")[0].get_text(strip = True)
        city = item.select(".t3")[0].get_text(strip = True)
        money = item.select(".t4")[0].get_text(strip = True)
        time = item.select(".t5")[0].get_text(strip = True)
        row = {
            "jobName":jobName,
            "company":company,
            "city":city,
            "money":money,
            "time":time
        }
        JOB_List.append(row)  # 大数组里面包含了每一行的字典
    return JOB_List
    # selector = etree.HTML(page)
    # titleList1 = selector.xpath("//div/p/span/a/text()")

def createTable():
    conn = pymysql.connect(**config)
    cursor = conn.cursor()
    cursor.execute("create table job (id int not null primary key, jobname varchar(50), company varchar(30), city char(8), salary varchar(12), time varchar(20))")
    conn.commit()
def saveSql(list):
    # with open("file\\title2.txt", mode="r", encoding="utf-8") as file:
    conn = pymysql.connect(host="localhost", user="root", password="123456", database="chengdu", charset="utf8")
    cursor = conn.cursor()
    n = 1
    for i in list:
        cursor.execute("insert into job values ('%d', '%s', '%s', '%s', '%s', '%s')" % (n, i['jobName'], i['company'], i['city'], i['money'], i['time']))
        n += 1
    conn.commit()
    cursor.close()
    conn.close()

def saveExcel(jobList):
    workbook = Workbook("大数据职位")  #创建工作bu
    sheet = workbook.create_sheet("北京Java", 0)
    sheet.append(["职位名", "公司名", "地点", "薪资", "时间"])
    for item in jobList:
        sheet.append([item['jobName'], item['company'],item['city'],item['money'],item['time']])
    workbook.save("job.xlsx")

if __name__ == '__main__':
   page =  pageDown("https://search.51job.com/list/010000,000000,0000,00,9,99,java,2,1.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=")
   list = pageParse(page)
   createTable()
   saveSql(list)
   saveExcel(list)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值