Python爬虫之学习案例

编程入门 行业动态 更新时间:2024-10-04 17:23:42

Python<a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫之学习案例"/>

Python爬虫之学习案例

Python爬虫

一、爬虫是什么

是一段代码,用于获取网页上的信息

几乎所有主流的高级程序设计语言都能实现爬虫

二、爬虫的实现原理

通过代码 模拟浏览器向服务器发送Http/Https/…请求

(服务器是无法判断请求来源的),然后对响应的HTML页面进行数据处理

  • 请求的发送
  • 响应数据的处理
  • 效率优化

三、HelloWorld

1、导入对应模块

java: class 文件是由 JVM 解释,运行的

​ JVM(JRE) 存在于 JDK 中

python: py文件 是由 Python解释器(interpreter)解释运行

​ Python的模块 是由 解释器中的pip模块安装的

  • urllib 模块

2、编写Python代码

# 从urllib模块中导入request子模块
from urllib import requesturl = "/"req = request.Request(url)html_code = request.urlopen(req).read()html_text = str(html_code, "utf-8")target = open("baidu.html", mode="w", encoding="utf-8")target.write(html_text)print("over...............")

四、一个完整的爬虫

# encoding=utf8
# 前程无忧 爬虫
__author__ = "崔译"# 发送http、https请求
from urllib import request# 用于解析处理HTML格式的字符串
from bs4 import BeautifulSoup# 用于连接mysql数据库
import pymysql# 用于连接redis数据库
import redis# 用于Excel读写操作
from openpyxl import Workbook# 导入time 模块
import time# 确定要爬取的url
url = ',000000,0000,00,9,99,Java,2,{}.html'# 模拟浏览器发送请求
# 模拟请求头信息
headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Language":"zh-CN,zh;q=0.8","Connection":"keep-alive","Host":"search.51job","Referer":",000000,0000,00,9,99,Java,2,4.html","Upgrade-Insecure-Requests":"1","User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
}# 进行爬取操作
def do_spider(page_no=1):# 创建请求对象,并且同时设置请求头req = request.Request(url.format(page_no), headers=headers)# 打开创建的请求,并读取响应的数据# 读取到的是bytes 类型html_bytes = request.urlopen(req).read()# print(type(html_bytes)) # =><class 'bytes'># 将读取的内容转成str类型# str 将任意类型转换为字符串类型,第二个参数是字符集# 对于爬虫而言,该字符集是 爬取的网站的字符集html_code = str(html_bytes, "gbk")# file = open("template.html",mode="w",encoding="gbk")# file.write(html_code)return html_code# 测试方法
def load_html():file = open("template.html",encoding="gbk")html_code = file.read()return html_code;# 解析html
def parse_html(html):# 方式1  使用正则表达式# 方式2  使用Xpath  是爬虫框架scrapy 所必须的技术# 方式3  使用 Python 第三方模块 Beautifulsoup ==> bs4#               能够将html语法的字符串进行解析,使用其中的方法来处理html# 解析参数soup = BeautifulSoup(html, "html.parser")# print(type(soup))# 以下所有的方法都可以用于BeautifulSoup或者Tag类型# find("标签名") 返回第一个对应的标签  相当于  .标签名# print(soup.find("input"))# print(soup.input)# find_all() 用法和find一致,只是返回的是所有的满足条件的标签,包括子标签# print(soup.find_all("input"))# div = soup.find_all("div")[1]# print(div[1])# div_in = div.find_all("div")[0]# print(div_in)# select() 参数是Css选择器 返回的是 列表# 所有的css选择器都能用# fot = soup.select(".footer .nag")# print(fot)# get_text() 获取标签内容 获取标签中的所有文字,包括子标签中的文字# text = soup.select("#area_channel_layer .tle")[0].get_text()# print(str(text).strip())result_list = []content_div = soup.select("#resultList")[0]item_divs = content_div.select(".el")# 去除表头,由于range 本身就是左闭右开,所以不需要len-1for item_div_index in range(1,len(item_divs)):# 对应一条数据item_div = item_divs[item_div_index]# print(item_div.get_text().strip())# job = item_div.p.get_text().strip()spans = item_div.find_all("span")# 将数据封装成 字典result_item = {"job": spans[0].get_text().strip(),"company": spans[1].get_text().strip(),"address": spans[2].get_text().strip(),"salary": spans[3].get_text().strip(),"publishDate": spans[4].get_text().strip()}# 将字典(每条数据) 放到列表中result_list.append(result_item)return result_list# 存储到mysql
def export_to_mysql(result):# 创建 连接信息的 字典config = {"host": "localhost","port": 3306,  # 默认是3306,可以不写"user": "root","passwd": "","db": "python","charset": "gbk"}# 获取Connectiondb = pymysql.connect(**config)# 获取游标对象(cursor), 其实对应PreparedStatement对象cursor = db.cursor()try:# 遍历参数中的所有的数据for item in result:# 创建sql语句sql = '''insert intot_jobs(job,address,salary,company,publishDate)values ('%s','%s','%s','%s','%s')                  ''' % (item['job'],item['address'],item['salary'],item['company'],item['publishDate'])# 执行sql语句cursor.execute(sql)dbmit()except Exception as e:print(e)db.rollback()db.close()# 将数据导出到redis
def export_to_redis(result):# 连接到redisr = redis.Redis(host="localhost",port=6379,db=0,charset="gbk")for item in result:r.lpush("jobs", str(item))# 从redis读取数据
def read_from_redis():r = redis.Redis(host="localhost", port=6379, db=0, charset="gbk" , decode_responses=True)print(r.lrange("jobs",0,-1))# 导出到Excel文件中
def export_to_excel(result):# 创建工作表wb = Workbook()# 创建worksheetsheet = wb.create_sheet("招聘信息",0)# 向表格中添加一行数据# 参数是一个listsheet.append(["职位名","公司名","工作地点","薪资","发布时间"])# 写入数据for item in result:sheet.append([item['job'],item['company'],item['address'],item['salary'],item['publishDate']])# 将工作簿保存到本地文件系统wb.save("export.xlsx")# code = do_spider()
code = load_html()
# print(code)
result = parse_html(code)
# print(result)
# export_to_mysql(result)
# export_to_redis(result)
# read_from_redis()
export_to_excel(result)
print("success..................")# 完善代码,实现每4秒抓取一个页面。抓取前5页
# 将数据导出
# encoding=utf8
# 前程无忧 爬虫
__author__ = "崔译"# 发送http、https请求
from urllib import request# 用于解析处理HTML格式的字符串
from bs4 import BeautifulSoup# 用于Excel读写操作
from openpyxl import Workbookimport requests# 确定要爬取的url
url = ',000000,0000,00,9,99,Java,2,{}.html'# 模拟浏览器发送请求
# 模拟请求头信息
headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Language":"zh-CN,zh;q=0.8","Connection":"keep-alive","Host":"search.51job","Referer":",000000,0000,00,9,99,Java,2,4.html","Upgrade-Insecure-Requests":"1","User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
}def get_proxy():return requests.get("http://127.0.0.1:5010/get/").contentdef do_spider(page_no=1):# req = request.Request(url.format(page_no), headers=headers)# 创建一个代理proxy = request.ProxyHandler({"sock5":get_proxy()})# 创建opener = request.build_opener(proxy)# 注册openerrequest.install_opener(opener)html_bytes = request.urlopen(url.format(page_no)).read()html_code = str(html_bytes, "gbk")print("爬取到第{}页数据".format(page_no))return html_code# 解析html
def parse_html():result_list = []page_no = 1while True:html = do_spider(page_no)soup = BeautifulSoup(html, "html.parser")content_div = soup.select("#resultList")[0]item_divs = content_div.select(".el")if len(item_divs) <= 1:breakfor item_div_index in range(1,len(item_divs)):item_div = item_divs[item_div_index]spans = item_div.find_all("span")result_item = {"job": spans[0].get_text().strip(),"company": spans[1].get_text().strip(),"address": spans[2].get_text().strip(),"salary": spans[3].get_text().strip(),"publishDate": spans[4].get_text().strip()}result_list.append(result_item)page_no += 1return result_list# 导出到Excel文件中
def export_to_excel(result):# 创建工作表wb = Workbook()# 创建worksheetsheet = wb.create_sheet("招聘信息",0)# 向表格中添加一行数据# 参数是一个listsheet.append(["职位名","公司名","工作地点","薪资","发布时间"])# 写入数据for item in result:sheet.append([item['job'],item['company'],item['address'],item['salary'],item['publishDate']])# 将工作簿保存到本地文件系统wb.save("export.xlsx")# code = do_spider()
# export_to_excel(result)
# print("success..................")result = parse_html()
export_to_excel(result)

更多推荐

Python爬虫之学习案例

本文发布于:2024-03-09 03:33:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1723638.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   案例   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!