网络爬虫
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解释器源文件





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

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

实操
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)'
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)
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()
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')