python基础知识

126 阅读4分钟

网络爬虫

1.什么是互联网:将全世界的计算机连接到一起组成的网络
2.互联网发明的目的是:将接入互联网的计算机上面的数据彼此共享
3.上网的本质是:基于互联网访问别人计算机上面的资源(有些计算机存在的意义就是让别人访问,这种类型的计算机我们也称之为服务器)
4.网络爬虫的本质:模拟计算机浏览器朝目标网址发送请求回去数据并筛选,只要是浏览器可以访问到的数据网络爬虫理论上都可以。    

爬取公司信息

import requests
res=requests.get('http://www.redbull.com.cn/about/branch')
print(res.content)
print(res.text)
with open(r'hn.html','wb')as f:
    f.write(res.content)
import re
with open(r'hn.html','r',encoding='utf8')as f:
    data=f.read()
    company_name_list=re.findall('<h2>(.*?)</h2>',data)
    company_name_list=re.findall("<p class='mapIco'>(.*?)</p>",data)
    company_addr_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
    company_email_list=re.findall("<p class='telIco'>(.*?)</p>",data)
    company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
    res=zip(company_name_list, company_addr_list, company_email_list, company_phone_list)
    for i in res:
        print("""
        公司名称:%s
        公司地址:%s
        公司邮箱:%s
        公司电话:%s
           % i""")

第三方模块下载

* 第三方模块必须先下载才可以导入使用
* python下载第三方模块需要借助pip工具
* 下载命令:pip3.6 install 模块名
* 1.下载速度很慢
        pip工具默认是从国外的仓库地址下载模块 速度很慢
        我们可以切换下载的地址(源地址)
        清华大学 :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/
    pip3.8 install 模块名 -i 源地址
    pycharm提供第三方模块下载快捷方式
    也可以直接修改python解释器源文件
    

d1cc1374e0394d8e2e1fec76af2d81c.jpg

1dc352d0b703434d13bc43d15de0ff2.jpg

997f576b1c76f228c3315b7d767f770.jpg

ca2809049c0dd9b73ba25bea3d084c7.jpg

9a9db2fa60099cc192a3c849c60b40c.jpg

    2.下载报错
            1.pip工具版本过低 直接拷贝提示信息里面的更新命令即可
                    python38 -m pip install --upgrade pip
            2.网络波动 关键字是Read timed out
                    只需要重新下载几次即可 或者切换一个网络稳定一点的
            3.有些模块在下载使用之前需要提前配置指定的环境
                    结合具体情况 百度搜索
    3.模块也有版本
            pip3.8 install 模块名==版本号
            pip3.8 install django==1.11.11
        

image.png

openpyxl模块

主要用于草最excel表格  也是pandas底层操作表格的模块
主要用于操作excel表格 也是pandas底层操作表格的模块
在python中能够操作excel表格的模块有很多
        openpyxl属于近几年比较流行的模块
        openpyxl针对03版本之前的excel文件兼容性不好
        xlwt、xlrd也可以操作excel表格
        兼容所有版本的excel文件 但是使用方式没有openpyxl简单
1.excel版本问题
        03版本之前 excel文件的后缀名 .xls
        03版本之后 excel文件的后缀名 .xlsx
        如果是苹果电脑excel文件的后缀 .csv
2.下载模块
        pip3.8 install openpyxl

image.png

实操

from openpyxl import Workbook  #创建文件
wb=Workbook()  #创建工作簿
wb.save(r'111.xlsx')  # 保存文件
wb1=wb.create_sheet('成绩表')
wb1=wb.create_sheet('财务表')
wb1=wb.create_sheet('校花表')

wb1.title='舔狗表'  # 支持二次修改
wb1.sheet_properties.tabColor="1072BA"  # 修改工作簿颜色
wb.save(r'111.xlsx')# 保存文件


写入数据
第一种写入数据
wb1['A1']='叙利亚悍匪'
wb1['D2']='慢男'
第二种写入方式
wb1.cell(row=3,column=2,value='老六慢走')
第三种写入方式(批量写入)
wb1.append(['username', 'password', 'age', 'gender', 'hobby'])
wb1.append(['jason1', 123, 18, 'male', 'read'])
wb1.append(['jason2', 123, 18, 'male', 'read'])
wb1.append(['jason3', 123, 18, 'male', 'read'])
wb1.append(['jason4', 123, 18, 'male', 'read'])
wb1.append(['jason4', 123, 18, 'male', None])
wb1.append([None, 123, 18, 'male', ''])

wb1['F11'] = '=sum(B5:B10)'

# openpyxl模块读数据
from openpyxl import Workbook, load_workbook
wb = Workbook()
wb1 = wb.create_sheet('洗浴中心', 0)
wb1 = wb.create_sheet('天上人间')
wb1 = wb.create_sheet('洗浴中心')
wb1.append(['username', 'gander', 'age'])
wb1.append(['jason', 'male''18'])
wb1.append(['kevin', 'male', '19'])
wb1.append(['jerry', 'male', '21'])
wb1.append(['tony', 'male', '20'])
wb.save(r'111.xlsx')
wb = load_workbook(r'111.xlsx')
print(wb.sheetnames)# 查看excel文件中所有的工作簿名称
wb1=wb['洗浴中心']
print(wb1.max_row)
print(wb1.max_column)
print(wb1['A1'].value)
print(wb1.cell(row=2,column=2).value)
for j in wb1.columns:
    print([i.value for i in j])
openpyxl 不擅长读数据 多以有一些模块优化了读取的方式
   pandasmok   一层一层的优化
   
   

爬取链家二手房数据

封装了openpyxl的pandas模块操作excel表格的方式
import pandas
d = {
    '公司名称': ['老男孩', '老女孩', '老伙计', '老北鼻'],
    '公司地址': ['上海', '深圳', '杭州', '东京'],
    '公司电话': [120, 130, 129, 996],
}
df = pandas.DataFrame(d)
df.to_excel(r'222.xlsx')

import requests

res = requests.get('https://sh.lianjia.com/ershoufang/')
# # 仅仅只能获取一页数据 爬虫知识点也是很多的 没你想的那么简单
with open(r'lj.html','wb') as f:
    f.write(res.content)

with open(r'lj.html', 'r', encoding='utf8') as f:
    data = f.read()
# 1.研究目标数据 筛选
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
)
home_name_list = re.findall(
    '<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?) </a>',
    data
)
home_addr_list = re.findall(
    '   -  <a href=".*?" target="_blank">(.*?)</a>',
    data
)
home_info_list = re.findall(
    '<div class="houseInfo"><span class="houseIcon"></span>(.*?)</div>',
    data
)
home_others_list = re.findall(
    '<div class="followInfo"><span class="starIcon"></span>(.*?)</div>',
    data
)
home_total_price = re.findall(
    '<div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>',
    data
)
home_unit_price = re.findall(
    '<div class="unitPrice" data-hid=".*?" data-rid=".*?" data-price=".*?"><span>(.*?)</span></div>',
    data
)
d = {
    '房屋标题':home_title_list,
    '小区名称':home_name_list,
    '所在街道':home_addr_list,
    '具体信息':home_info_list,
    '其他信息':home_others_list,
    '房屋总价':home_total_price,
    '房屋单价':home_unit_price
}
df = pandas.DataFrame(d)
df.to_excel(r'333.xlsx')