python(第三方模块,网络爬虫的简单使用)
今日内容概要
- 练习
 - 第三方模块的下载与使用
 - 网络爬虫模块之requests模块
 - 网络爬虫实战之爬取链家二手房数据
 - 自动化办公领域之openpyxl模块
 - 第三方模块的扩展(模块叠模块)
 
练习
"""
网络爬虫的更深层的东西远没有现在我们接触的这么简单,
   现在就是简单的基础应用为对网站的拷贝与获取
   		有时候页面的页数数据无法直接拷贝获取
   		有时候页面还可能存在防爬机制,弄得不好的话IP可能会被短暂的拉黑,封禁
"""
练习的思路:
1.直接拷贝
import re
# 1.文件操作读取文本内容
with open(r'tset.html', 'r', encoding='utf8') as f:
    # 2.直接读取全部内容
    data = f.read()
    # 3.研究各部分数据的特征,编写相应的正则表达式
    """
    思路:
    一次性获取每个公司的全部数据
    分部分挨个获取最后统一整合
    """
# res = re.findall("<h2>(.*?)</h2><p class='mapIco'>(.*?)</p><p class='mailIco'>(.*?)</p><p class='telIco'>(.*?)</p>",data)
# print(res)  # 返回的结果是[(),(),(),()]
comp_title_list = re.findall('<h2>(.*?)</h2>', data)
comp_address_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
comp_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
comp_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
res = zip(comp_phone_list, comp_email_list, comp_address_list, comp_title_list, )
print(list(res))
with open(r'comp_info.txt', 'w', encoding='utf8') as f:
    for data_tuple in res:
        print(
            """
            公司名称:%s
            公司地址:%s
            公司邮编:%s
            公司电话:%s
            """ % data_tuple)
        f.write("""
            公司名称:%s
            公司地址:%s
            公司邮编:%s
            公司电话:%s\n
            """ % data_tuple)
第三方模块的下载与使用
第三方模块含义:
第三方模块就是所谓别人写的模块,别人写好的模块一般情况功能都比较强大,而如果我们想要使用第三方模块的话,就需要先下载,之后就能反复使用能了(就相当于是内置模块)
下载第三方模块的方式:
1.pip工具
	需要注意每个解释器都有pip工具,如果我们的电脑上有多个版本的解释器的话,那么我们在使用pip的时候一定要注意到底使用的是哪一个,否则极其任意出现使用的A版本,然后却使用到B版本的pip来进行下载模块。
    为了避免pip这一冲突,我们在使用的时候可以添加对应的版本号
    
    python 27    pip 2.7
    python 36    pip 3.6
    python 38    pip 3.8
    
    
    下载第三方模块的句式:
    	pip install 模块名
        
    下载第三方模块指定版本(不指定的话,默认是最新版)
    	pip install 模块名 == 版本号 -i 仓库地址
        
2.pycharm提供的快捷方式
settings 
	project 
		project interprter
			双击或者加号
点击右下方manage管理添加源地址即可

在官方网站中进行下载
官方网址:https://pypi.org/
下载第三方的模块可能会出现的问题:
1.报错并有警告信息
	WARNING: You are using pip version 20.2.1;
   原因:pip的版本过低,只需要拷贝后面的命令执行更新操作即可
	d:\python38\python.exe -m pip install --upgrade pip
	措施:更新完成后在执行下载第三方模块的命令即可
    
2.报错的提示信息中含有关键字timeout
    原因:说明当前计算机网络不稳定
    措施:再次尝试 或者切换更加稳定的网络
3.找不到pip命令
	环境变量问题
    
4.没有任何的关键字 不同的模块报不同的错
    原因:模块需要特定的计算机环境
    措施:拷贝报错信息 打开浏览器 百度搜索即可
	pip下载某个模块报错错误信息:pip下载XXX报错
    
5.下载速度很慢
pip默认下载的仓库地址是国外的 python.org
我们可以切换下载的地址
pip install 模块名 -i 仓库地址
pip的仓库地址有很多,百度查询即可
pip命令默认下载的渠道是国外的python官网(有时候会非常的慢)
我们可以切换下载的源(仓库)
清华大学 :https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:
http://mirrors.aliyun.com/pypi/simple/
中国科学技术大学 :http://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学:
http://pypi.hustunique.com/
豆瓣源:
http://pypi.douban.com/simple/
腾讯源:http://mirrors.cloud.tencent.com/pypi/simple
华为镜像源:https://repo.huaweicloud.com/repository/pypi/simple/
网络爬虫之requersts模块
为什么要学习网络爬虫呢?
数据现如今已经是当代最热们的话题之一,在数量暴增长的互联网时代,网站与用法沟通实质为数据的交换。如果大量的数据得以分析,我们能够对事件的看法,解决方案做出更好的决策。而网络爬虫技术,则是数据分析领域的第一环节。
能从网络上爬取什么数据?
所有在网页能见到的数据都可以通过爬虫程序保存下来,
python爬虫的流程
爬虫就是编写好程序,模拟浏览器发送请求,然后服务端把数据相应给自己,然后再对响应的数据进行解析,拿到我们想要的那一部分,这就是爬虫的过程。当然了,很多的网页网站是不希望自己的数据被爬虫拿到的,毕竟有很多的人会不怀好意的爬取网站的数据进行非法交易,所以在网站中设置了一些反爬机制,判断用户发送的请求是不是一个爬虫程序,如果是,就不给他们数据。但是人外有人,天外有天的,对与真的想获取数据的人来说,可以通过网站的反爬机制和制定相应的过程,就是所谓的反反爬。
爬虫一共有四个部分:发送请求,获取相应,解析数据,保存数据,如下图:

今天要讲的就是利用requests模块发送请求的过程,也是整个过程中最重要的一步,因为上面所说的反爬和反反爬都在其中
requests支持的请求方式
import requests
# 1.朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)
# res = requests.get('http://www.redbull.com.cn/about/branch')
# print(res)
# print(res.content)  # 获取bytes类型的网页数据(二进制)
#  res.encoding='utf8' # 指定编码
# print(res.text)  # 获取字符串类型的网页数据 默认计算机的字符编码  utf8
# 例子:
res = requests.get('http://qn.www2.autoimg.cn/')
print(res.text)
网络爬虫之爬取链家二手房数据
import requests
import re
# 朝网址发送数据,
res = requests.get('https://sh.lianjia.com/ershoufang/')
# print(res.text)   # 有的网址是不能被访问的,不要随便频繁的访问网页,可能被拉黑
# 可以通过在网址后添加参数,headers ={user-Agent:''}请求即可
# 写正则解析即可
data = res.text
home_title_list = re.findall(
    '<a class="" href=".*?" target="_blank" data-log_index=".*?"  data-el="ershoufang" data-housecode=".*?" data-is_focus="" data-sl="">(.*?)</a>',
    data)
# print(home_title_list)
# 小区名字
home_street_list = re.findall('<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?) </a>', data)
# print(home_street_list)
# 小区地址
home_name_list = re.findall(
    '<div class="flood"><div class="positionInfo"><span class="positionIcon"></span><a href=".*?" target="_blank" data-log_index=".*?" data-el="region">.*? </a>   -  <a href=".*?" target="_blank">(.*?)</a> </div></div>',
    data)
# print(home_name_list)
# 房子信息
home_info_list = re.findall('<div class="houseInfo"><span class="houseIcon"></span>(.*?)</div>', data)
# print(home_info_list)
# 关注信息
home_watch_list = re.findall('<div class="followInfo"><span class="starIcon"></span>(.*?)</div>', data)
# print(home_watch_list)
# 总价
home_total_list = re.findall('<div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>',
                             data)
# print(home_total_list)
# 单价
home_unit_price_list = re.findall(
    '<div class="unitPrice" data-hid=".*?" data-rid=".*?" data-price=".*?"><span>(.*?)</span></div>', data)
# print(home_unit_price_list)
home_data = zip(home_title_list, home_street_list, home_name_list, home_info_list, home_watch_list, home_total_list,
                home_unit_price_list)
with open(r'home_data','w',encoding='utf8') as f:
    for data in home_data:
        f.write("""
         房屋标题:%s
         小区名称:%s
         街道地址:%s
         详细信息:%s
         房屋关注度:%s
         房屋总价:%s
         房屋单价:%s
         
         """ % data)
        print(
            """
         房屋标题:%s
         小区名称:%s
         街道地址:%s
         详细信息:%s
         房屋关注度:%s
         房屋总价:%s
         房屋单价:%s
         """ % data
        )
自动化办公领域之openpyxl模块
1.excel文件的后缀名问题
03版之前   20年前
	.xls
 03版之后
	.xlsx
    
 2.操作excel表格的第三方模块
	xlwt往表格中(写)入数据、wlod从表格中(读)取数据
    	兼容所有版本的excel文件
    openpyxl最近几年比较火热的操作Excel表格的模块
    	03版本之前的兼容性较差
 PS:还有很多操作Excel表格的模块,甚至涵盖了上述的模块>>>>>pands
3.openpyxl操作
"""在接触新的东西的时候,要学会看官方文档"""
    from openpyxl import Workbook
    # 创建一个excel文件
    wb = Workbook()
    # 在一个excel文件内创建多个工作簿
    wb1 = wb.create_sheet('学生名单')
    wb2 = wb.create_sheet('舔狗名单')
    wb3 = wb.create_sheet('海王名单')
    # 还可以修改默认的工作簿位置
    wb4 = wb.create_sheet('富婆名单', 0)
    # 还可以二次修改工作簿名称
    wb4.title = '高富帅名单'
    wb4.sheet_properties.tabColor = "1072BA"
    # 填写数据的方式1
    # wb4['F4'] = 666
    # 填写数据的方式2
    # wb4.cell(row=3, column=1, value='jason')
    # 填写数据的方式3
    wb4.append(['编号', '姓名', '年龄', '爱好'])  # 表头字段
    wb4.append([1, 'jason', 18, 'read'])
    wb4.append([2, 'kevin', 28, 'music'])
    wb4.append([3, 'tony', 58, 'play'])
    wb4.append([4, 'oscar', 38, 'ball'])
    wb4.append([5, 'jerry', 'ball'])
    wb4.append([6, 'tom', 88,'ball','哈哈哈'])
    # 填写数学公式
    # wb4.cell(row=1, column=1, value=12321)
    # wb4.cell(row=2, column=1, value=3424)
    # wb4.cell(row=3, column=1, value=23423432)
    # wb4.cell(row=4, column=1, value=2332)
    # wb4['A5'] = '=sum(A1:A4)'
    # wb4.cell(row=8, column=3, value='=sum(A1:A4)')
    # 保存该excel文件
    wb.save(r'111.xlsx')
"""
openpyxl主要用于数据的写入 至于后续的表单操作它并不是很擅长 如果想做需要更高级的模块pandas
import pandas
data_dict = {
    "公司名称": comp_title_list,
    "公司地址": comp_address_list,
    "公司邮编": comp_email_list,
    "公司电话": comp_phone_list
}
# 将字典转换成pandas里面的DataFrame数据结构
df = pandas.DataFrame(data_dict)
# 直接保存成excel文件
df.to_excel(r'pd_comp_info.xlsx')
excel软件正常可以打开操作的数据集在10万左右 一旦数据集过大 软件操作几乎无效
需要使用代码操作>>>:pandas模块
"""
openpyxl主要用于数据的写入 至于后续的表单操作它并不是很擅长 如果想做需要更高级的模块pandas
import pandas
data_dict = {
    "公司名称": comp_title_list,
    "公司地址": comp_address_list,
    "公司邮编": comp_email_list,
    "公司电话": comp_phone_list
}
# 将字典转换成pandas里面的DataFrame数据结构
df = pandas.DataFrame(data_dict)
# 直接保存成excel文件
df.to_excel(r'pd_comp_info.xlsx')
excel软件正常可以打开操作的数据集在10万左右 一旦数据集过大 软件操作几乎无效
需要使用代码操作>>>:pandas模块

                
            
        
浙公网安备 33010602011771号