首页 > 其他分享 >爬虫前戏

爬虫前戏

时间:2022-10-26 17:36:20浏览次数:44  
标签:wb4 list 爬虫 re 模块 home data

第三方模块的下载与使用

第三方模块:别人写的模块 一般情况下功能都特别强大  
我们如果想使用第三方模块 第一次必须先下载后面才可以反复使用(等同于内置模块)
下载第三方模块的方式
	1pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。
软件包也可以在 https://pypi.org/ 中找到。
目前最新的 Python 版本已经预装了 pip
	注意每个解释器都有pip工具 如果我们的电脑上有多个版本的解释器那么我们在使用pip的时候一定要注意到底用的是哪一个 否则极其任意出现使用的是A版本解释器然后用B版本的pip下载模块
    为了避免pip冲突 我们在使用的时候可以添加对应的版本号
    python27			 pip2.7
    python36			pip3.6
    python38			pip3.8
    下载第三方模块的句式
    pip install 模块名
    下载第三方模块临时切换仓库
    pip install 模块名 -i 仓库地址
    下载第三方模块指定版本(不指定默认是最新版)
    pip install 模块名==版本号 -i 仓库地址
 	2.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 模块比 urllib 模块更简洁。
requests模块能够模拟浏览器发送网络请求
import requests
# 1.朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)
# res = requests.get('http://www.redbull.com.cn/about/branch')
# print(res.content)  # 获取bytes类型的网页数据(二进制)
# res.encoding = 'utf8'  # 指定编码
# print(res.text)  # 获取字符串类型的网页数据(默认按照utf8)

image-20221026145747875

requests 方法

requests 方法如下表:
方法 	描述
delete(url, args) 	发送 DELETE 请求到指定 url
get(url, params, args) 	发送 GET 请求到指定 url
head(url, 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模块
"""

作业

如何爬取二手房指定页数的数据
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):       
	dizhi=f'https://sh.lianjia.com/ershoufang/pudong/pg{choice}/'
    else:
        print('页数不存在')
print(dizhi)
res=requests.get(dizhi)
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
        )



标签:wb4,list,爬虫,re,模块,home,data
From: https://www.cnblogs.com/bnmm/p/16829231.html

相关文章

  • 【k哥爬虫普法】简历大数据公司被查封,个人隐私是红线!
    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的......
  • 爬虫不使用HTTP代理会怎样
    很多人知道爬虫工作需要HTTP代理的支持,但却不知道爬虫为什么要使用代理,不使用代理会怎样呢,今天我们一起来讨论下。网络爬虫主要是一种通过代码模拟真实用户批量......
  • 爬虫使用免费HTTP代理会怎样
     我们都知道,爬虫工作想要效率全开,必须要高效的HTTP代理支持。但是很多人为了节省成本,会找一些不要钱的代理来使用。那么爬虫程序用了这些免费的HTTP代理到底会怎样......
  • 怎么使用HTTP代理才能让爬虫工作效率更高
    我们都知道,想要提高爬虫每天的工作效率,必须要大量的HTTP代理来支持。那么,怎么使用HTTP代理才能让爬虫工作效率更高呢?1、爬虫程序效率优化我们在设计爬虫程......
  • 爬虫
    bs4aa=bs('r','lxml')div=aa.find('div',class_="values").textli=aa.select(".classname>ul>li")xpathfromlxmlimportetreetree=etree.HTML("page")tr......
  • 最新抖音数据分析app爬虫
    我们提供封装好的抖音数据采集接口,实时采集,接口稳定。长期维护使用便宜接口使用详情请参考接口地址:github访问地址:https://github.com/ping0206guo/pingguoapi全部支......
  • 如何使用GitHub Actions发布自己的爬虫代码
    一.从上一篇GitHubActions详解了解了GitHubActions,我们理一下使用GitHubActions详解发布爬虫需要哪几个步骤上传爬虫代码到GitHub仓库创建GitHubActions工作流,并提......
  • 如何测试爬虫ip的可用性
    网络爬虫的应用极大的方便了人们,尤其是多线程多任务工作时,能够极大的提高信息采集工作效率。在使用爬虫IP时,经常会遇到代理时效的问题,那么我们该怎么检测代理是否正常?静态......
  • 如何让爬虫通过本身工作原理持续工作
    我们知道,网络爬虫是指使用代码模拟真实用户发送网络请求,并获取数据的一个程序或者脚本。但如果不使用爬虫HTTP代理,很快就会被目标网站限制访问,那么,爬虫代理的工作原理......
  • selenium爬虫问题汇总
    基本框架fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.action_chainsimportActionChains#打开dri......