Python——爬虫准备工作
第三方模块的下载与使用
''' 第三方模块: 别人写的模块,一般情况下,功能都非常强大 使用第三方模块: 第一次使用必须先下载,后面才可以反复使用(下载后相当于内置模块) 下载第三方模块的方式: pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装和卸载的功能。 软件包也可以在https://pypi.org/ 中找到 目前最新版的python版本已经预装了pip ps:每个版本的解释器都有自己的pip工具,在使用的时候,我们要注意自己用的到底是那个,为了避免pip冲突,我们可以在使用的时候添加对应的版本号。 下载第三方模块的相关操作: 下载第三方模块的dos命令: pip install 模块名 下载第三方模块临时切换仓库: pip install 模块名 -i 仓库地址 下载第三方模块指定版本(不指定为最新版) pip install 模块名==版本号 -i 仓库地址 也可以使用Pycharm提供的快捷方式 下载第三方模块可能会出现的问题 1.报错并有警告信息 WARNING: You are using pip version 20.2.1; 原因在于pip版本过低 只需要拷贝后面的命令执行更新操作即可 d:\python38\python.exe -m pip install --upgrade pip 更新完成后再次执行下载第三方模块的命令即可 2.报错并含有Timeout关键字 说明当前计算机网络不稳定 只需要换网或者重新执行几次即可 3.报错并没有关键字 面向百度搜索 pip下载XXX报错:拷贝错误信息 通常都是需要用户提前准备好一些环境才可以顺利下载 4.下载速度很慢 pip默认下载的仓库地址是国外的 python.org 我们可以切换下载的地址 pip install 模块名 -i 仓库地址 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/ '''
requests模块
''' Python中内置了requests模块,该模块只要用来发送HTTP请求。 requests模块能够模拟浏览器发送网络请求 ''' import requests # 向指定网址发送请求,获取页面数据 res = requests.get('网址') # content 获取bytes类型的网页数据 print(res.content) # 指定编码 res.encoding = 'utf8' # 获取字符串类型的网页数据(默认为utf8) res.text
requests的属性和方法
方法 描述 delete(url, args) 发送 delete 请求到指定 url get(url, params, args) 发送 get 请求到指定 url head(url, data, args) 发送 head 请求到指定 url patch(url, data, args) 发送 patch 求到指定 url post(url, data, json, args) 发送 post 请求到指定 url put(url, data, args) 发送 put 请求到指定 url request(method, url, args) 向指定的 url 发送指定的请求方法
爬取二手房数据
import requests import re res = requests.get('https://sh.lianjia.com/ershoufang/pudong/') # print(res.text) 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_name_list = re.findall('<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?) </a>', data) # print(home_name_list) home_street_list = re.findall( '<div class="positionInfo"><span class="positionIcon"></span><a href=".*?" target="_blank" data-log_index=".*?" data-el="region">.*? </a> - <a href=".*?" target="_blank">(.*?)</a> </div>', data) # print(home_street_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_price_list = re.findall( '<div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>', data) # print(home_total_price_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_name_list, home_street_list, home_info_list, home_watch_list, home_total_price_list, home_unit_price_list) with open(r'home_data.txt','w',encoding='utf8') as f: for data in home_data: print( """ 房屋标题:%s 小区名称:%s 街道名称:%s 详细信息:%s 关注程度:%s 房屋总价:%s 房屋单价:%s """%data ) f.write(""" 房屋标题:%s 小区名称:%s 街道名称:%s 详细信息:%s 关注程度:%s 房屋总价:%s 房屋单价:%s\n """%data)
自动化办公之openpyxl模块
''' 1.excel文件的后缀名问题 03版本之前 .xls 03版本之后 .xlsx 2.操作excel表格的第三方模块 xlwt往表格中写入数据、wlrd从表格中读取数据 兼容所有版本的excel文件 openpyxl最近几年比较火热的操作excel表格的模块 03版本之前的兼容性较差 ps:还有很多操作excel表格的模块 甚至涵盖了上述的模块>>>:pandas 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模块 """
标签:wb4,Python,list,爬虫,re,模块,准备,home,data From: https://www.cnblogs.com/HaiMan/p/16829851.html练习
# coding:utf-8 # 如何爬取二手房指定页数的数据 import re import requests as requests choice = input('请输入您想查看的页数').strip() if not choice.isdigit(): print('请输入数字') choice = int(choice) for i in range(1, 101): if choice in range(1, 101): address = f'https://sh.lianjia.com/ershoufang/pudong/pg{choice}/' else: print('页数不存在') print(address) res = requests.get(address) 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) home_name_list = re.findall('<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?) </a>', data) home_street_list = re.findall( '<div class="positionInfo"><span class="positionIcon"></span><a href=".*?" target="_blank" data-log_index=".*?" data-el="region">.*? </a> - <a href=".*?" target="_blank">(.*?)</a> </div>', data) home_info_list = re.findall('<div class="houseInfo"><span class="houseIcon"></span>(.*?)</div>', data) home_watch_list = re.findall('<div class="followInfo"><span class="starIcon"></span>(.*?)</div>', data) home_total_price_list = re.findall( '<div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>', data) home_unit_price_list = re.findall( '<div class="unitPrice" data-hid=".*?" data-rid=".*?" data-price=".*?"><span>(.*?)</span></div>', data) home_data = zip(home_title_list, home_name_list, home_street_list, home_info_list, home_watch_list, home_total_price_list, home_unit_price_list) with open(r'home_data.txt', 'w', encoding='utf8') as f: for data in home_data: print( """ 房屋标题:%s 小区名称:%s 街道名称:%s 详细信息:%s 关注程度:%s 房屋总价:%s万 房屋单价:%s """ % data ) f.write( """ 房屋标题:%s 小区名称:%s 街道名称:%s 详细信息:%s 关注程度:%s 房屋总价:%s万 房屋单价:%s """ % data )