爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel

更新时间:2021.9.16
vedio:15,16,17,18,19,20,21,22,23,24,25*

# -*- coding: utf-8 -*-
# @Time    : 2021/9/4 18:33
# @Author  : 李新宇
# @FileName: t1.py
# @Software: PyCharmdef add(a,b):return a+bprint(add(2,3))
# -*- coding: utf-8 -*-
# @Time    : 2021/9/4 18:33
# @Author  : 李新宇
# @FileName: t2.py
# @Software: PyCharmfrom test1 import t1#引入自定义模块
print(t1.add(2,3))#引入系统模块
import os
import sys#引入·第三方模块
import re
# -*- coding: utf-8 -*-
# @Time    : 2021/9/9 10:56
# @Author  : 李新宇
# @FileName: testXwlt.py
# @Software: PyCharm
import xlwt
'''
workbook =  xlwt.Workbook(encoding="utf-8")  #创建workbook对象
worksheet = workbook.add_sheet('sheet1')  #创建工作表
worksheet.write(0,0,'hello')  #写入数据,第一个参数“行”,第二个参数“列”,第三个参数内容
workbook.save('studen.xls')  #保存数据表
'''
#99乘法表
workbook =  xlwt.Workbook(encoding="utf-8")  #创建workbook对象
worksheet = workbook.add_sheet('sheet1')  #创建工作表
for i in range(0,9):for j in range(0,i+1):worksheet.write(i,j,"%d * %d = %d"%(i+1,j+1,(i+1)*(j+1)))
workbook.save('studen.xls')  #保存数据表
# -*- coding: utf-8 -*-
# @Time    : 2021/9/4 19:12
# @Author  : 李新宇
# @FileName: testUrllib.py
# @Software: PyCharmimport urllib.request'''
#获取一个get请求
response = urllib.request.urlopen("http://www.baidu.com")
print(response.read().decode('utf-8'))  #对获取到的网页源码进行utf-8的解码#获取一个post请求
'''
'''
import urllib.parse
data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding='utf-8')
response = urllib.request.urlopen("http://httpbin.org/post",data= data )
print(response.read().decode('utf-8'))
'''#获取一个get请求
'''
try:response = urllib.request.urlopen("http://httpbin.org/get",timeout=3)print(response.read().decode('utf-8'))
except urllib.error.URLError as e:print("time out")
''''''
response = urllib.request.urlopen("http://www.baidu.com")
#print(response.status)
print(response.getheaders())
'''# url = "http://www.douban.com"
'''
url = "http://httpbin.org/post"headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38"
}
data = bytes(urllib.parse.urlencode({'name':'eric'}),encoding="utf-8")
req = urllib.request.Request(url=url,data=data,headers=headers,method="POST")response = urllib.request.urlopen(req)
print(response.read().decode('utf-8'))'''
url = "http://www.douban.com"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38"
}
req = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))
# -*- coding: utf-8 -*-
# @Time    : 2021/9/7 21:04
# @Author  : 李新宇
# @FileName: testBs4.py
# @Software: PyCharm
import refrom bs4 import BeautifulSoupfile = open("./baidu.html","rb")
html = file.read().decode("utf-8")
bs = BeautifulSoup(html,"html.parser")#print(bs.title)#print(bs.a)
#print(type(bs.head))
#1.tag 标签及其内容:拿到他所找到的第一个内容'''
print(bs.title.string)
print(type(bs.title.string))
#NavigableString 标签里的内容(字符串)
'''#print(bs.a.attrs)#attrs属性#print(type(bs))
#3.BeautifulSoup:   表示整个文档#print(bs)#
# print(bs.a.string)
# print(type(bs.a.string))#4.commment 是一个特殊的NavigableString ,输出的内容不包含注释符号#---------------------------------#文档的遍历#print(bs.head.contents)
#print(bs.head.contents[1])#更多内容,搜索文档#文档的搜索#find_all()
#字符串过滤:会查找与字符串完全匹配的内容
#t_list = bs.find_all("a")
import re
#正则表达式搜索:使用serach()方法来匹配内容
#t_list = bs.find_all(re.compile("a"))#方法 :传入一个函数(方法),根据函数的方法要求来搜索(了解)
'''
def name_is_exists(tag):return tag.has_attr("name")
t_list = bs.find_all(name_is_exists)for item in t_list:print(item)#print(t_list)'''#2.kwargs   参数#t_list = bs.find_all(id="head")# t_list = bs.find_all(class_="True")
#
# for item in t_list:
#     print(item)#3.text文本# t_list = bs.find_all(text="hao123")
#t_list = bs.find_all(text=["hao123","地图","贴吧"])#t_list = bs.find_all(text=re.compile("\d")) #应用正则表达式来查找包含特定文本的内容(标签里的字符串)#4.limit参数
# t_list = bs.find_all("a",limit=3)
#
# for item in t_list:
#      print(item)
##4.css选择器
#t_list = bs.select("title")  #通过标签来查找#t_list = bs.select(".mnav")    #通过类名来查找#t_list = bs.select("#u1")        #通过id来查找#t_list = bs.select("a[class='bri']")  #通过属性来查找#t_list = bs.select("head > title")   #通过子标签来查找# t_list = bs.select(".mnav ~ .bri")
# print(t_list[0].get_text())# for item in t_list:
#       print(item)
# -*- coding: utf-8 -*-
# @Time    : 2021/9/8 16:05
# @Author  : 李新宇
# @FileName: testre.py
# @Software: PyCharm#正则表达式: 字符串模式 (判断字符串是否符合一定的标准)import re
#创建模式对象pat = re.compile("AA") #此处的aa是正则表达式,用来验证其他的字符串#m = pat.search("BBBBCCAA")  #search后字符串被检验的内容#m = pat.search("BBAABBCCAA") #search方法进行查找,比对#没有模式对象
# m = re.search("asd","asdd") #前面的字符串是规则(模板),后面的字符串是被校验的对象
# print(m)#print(re.findall("a","asdaddddaa"))         #前面字符串是规则(正则表达式),后面字符串是被校验的字符串#print(re.findall("[a-z]","AAasdaddddaa"))#print(re.findall("[a-z]+","AAsAdadddAAdaa"))#subprint(re.sub("a","A","abcdcasd"))  #找到a用A替换,在第三个字符串中查找,substitute#建议在正则表达式中,被比较的字符串前面加上r,不用担心转义字符的问题
a = r"\aabd-\'"
print(a)
# -*- coding: utf-8 -*-
# @Time    : 2021/9/9 16:18
# @Author  : 李新宇
# @FileName: testsqlite.py
# @Software: PyCharmfrom bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作def main():baseurl = "https://movie.douban.com/top250?start="# 1.爬取网页datalist = getData(baseurl)savepath = "豆瓣电影Top250.xls"# 3.保存数据saveData(datalist,savepath)# askURL("https://movie.douban.com/top250?start=")# 影片详情链接的规则
findLink = re.compile(r'<a href="(.*?)">')  # 创建正则表达式对象,表示规则(字符串的模式)
# 影片图片
findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)  # re.S 让换行符包含在字符中
# 影片片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
# 影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 找到评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>')
# 找到概况
findInq = re.compile(r'<span class="inq">(.*)</span>')
# 找到影片的相关内容
findBd = re.compile(r'<p class="">(.*?)</p>', re.S)# 爬取网页
def getData(baseurl):datalist = []for i in range(0, 10):  # 调用获取页面信息的函数,10次url = baseurl + str(i * 25)html = askURL(url)  # 保存获取到的网页源码# 2.逐一解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('div', class_="item"):  # 查找符合要求的字符串,形成列表# print(item)   #测试:查看电影item全部信息data = []  # 保存一部电影的所有信息item = str(item)# 影片详情的链接link = re.findall(findLink, item)[0]  # re库用来通过正则表达式查找指定的字符串data.append(link)  # 添加链接imgSrc = re.findall(findImgSrc, item)[0]data.append(imgSrc)  # 添加图片titles = re.findall(findTitle, item)  # 片名可能只有一个中文名,没有外国名if (len(titles) == 2):ctitle = titles[0]  # 添加中文名data.append(ctitle)otitle = titles[1].replace("/", "")  # 去掉无关的符号data.append(otitle)  # 添加外国名else:data.append(titles[0])data.append(' ')  # 外国名字留空rating = re.findall(findRating, item)[0]data.append(rating)  # 添加评分judgeNum = re.findall(findJudge, item)[0]data.append(judgeNum)  # 提加评价人数inq = re.findall(findInq, item)if len(inq) != 0:inq = inq[0].replace("。", "")  # 去掉句号data.append(inq)  # 添加概述else:data.append(" ")  # 留空bd = re.findall(findBd, item)[0]bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd)  # 去掉<br/>bd = re.sub('/', " ", bd)  # 替换/data.append(bd.strip())  # 去掉前后的空格datalist.append(data)  # 把处理好的一部电影信息放入datalist#print(datalist)return datalist# 得到指定一个URL的网页内容
def askURL(url):head = {  # 模拟浏览器头部信息,向豆瓣服务器发送消息"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"}# 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html# 保存数据
def saveData(datalist, savepath):print("save....")book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook对象sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)  # 创建工作表col = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息")for i in range(0, 8):sheet.write(0, i, col[i])  # 列名for i in range(0, 250):print("第%d条" % (i + 1))data = datalist[i]for j in range(0, 8):sheet.write(i + 1, j, data[j])  # 数据book.save(savepath)  # 保存if __name__ == "__main__":  # 当程序执行时# 调用函数main()print("爬取完毕!")

【6】爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel相关推荐

  1. 微信公众号内容如何获取,python教你抓包分析并保存数据

    前言 今天来教大家如何使用Fiddler抓包工具,获取公众号(PC客户端)的数据. Fiddler是位于客户端和服务器端的HTTP代理,是目前最常用的http抓包工具之一. 环境准备 python 3 ...

  2. python收取wss数据_Python金融应用之提取交易日+合并截面数据

    NO.160 2020.07.15 工欲善其事,必先利其器 // - 前言 - ◆ ◆ ◆ ◆ 今天,小咖来讲讲如何利用Python提取最近交易日.前一周交易日.前一月交易日.前一季度交易日等,并提取 ...

  3. scrapy框架使用piplines、items进行提取项目并保存数据

    1 .Scrapy提取项目 从网页中提取数据,Scrapy 使用基于 XPath 和 CSS 表达式的技术叫做选择器. 选择器有四个基本的方法,如下所示: S.N. 方法 & 描述 extra ...

  4. python如何提取数据中的年月_Python提取特定时间段内数据的方法实例

    怎样用python提取不同股票csv里特定时间段的数据小编推开你的时候,从来没想过,小编爱你爱的那么深 如何在python中调用道指指定时间段的收盘数据? pandas是python环境下最有名的数据 ...

  5. Python爬虫入门实战1:获取CSDN个人博客文章目录及阅读量数据

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 ░ 一.引言 有阵子博客的访问量出现了比较大 ...

  6. 通过爬虫等手段,免费获取非小号和coinmarket的实时汇率等行情数据

    1.非小号 爬取非小号:通过抓取network,发现非小号的币价汇率接口,然后用程序拿这个返回的数据,就可以了. https://dncapi.bqiapp.com/api/coin/web-coin ...

  7. 0.爬虫介绍及requests库的使用

    1. 互联网知识介绍 互联网: 是由网络设备(网线, 路由器, 交换机, 防火墙...)和一台台计算机链接而成. 互联网建立的目的: 数据的共享/传递. 俗称的'上网': 由用户端计算机发送请求给目标 ...

  8. 爬虫介绍02:爬取第一个站点

    为了搜刮某个站点,第一步我们需要下载该站包含有用信息的页面,也就是我么尝尝提到的爬取过程.爬站的方式多种多样,我们需要根据目标站点的结构选择合适的爬站方案.下面讨论如何安全的爬站,以及常用的三种方法: ...

  9. python爬虫qq好友信息,GitHub - equationl/QQzone_crawler: QQ 空间动态爬虫,利用cookie登录获取所有可访问好友空间的动态保存到本地...

    关于 Edit by equationl 优先在 码云 上更新 该项目修改自 xjr7670 的 QQzone_crawler 原作者说明: QQ空间动态爬虫 修改了什么? 爬取完整的评论列表 爬取点 ...

最新文章

  1. 用Python轻松搞定Excel中的20个常用操作
  2. 解决windows显示开启HDR后chrome内截图泛白问题
  3. 3.11 随机初始化-深度学习-Stanford吴恩达教授
  4. 计算机目标导学方法,计算机教学计划
  5. 华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...
  6. 七年程序员生涯,我学到最重要的 6 个教训,别再中招!
  7. 为什么python发展的好_为什么Python发展这么快,有哪些优势?
  8. 前端进阶试题-CSS篇
  9. 基于selenium的钓鱼工具:关于ReelPhish神器的使用
  10. Springboot2.0从零开始搭建脚手架-初始化和整合MybatisPlus3.0+...
  11. 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
  12. 数据结构笔记(二十一)--二叉树的遍历
  13. 计算机视觉基础:霍夫变换(Computer Vision Fundamentals: Hough Transform)
  14. 关于java多线程堆和栈的共享问题
  15. 逻辑英语语法电子版_11920671英语逻辑语法上.pdf
  16. 笔记本开机密码忘记了怎么解决,消除笔记本密码
  17. 一图看懂RTB广告竞价原理,原来这就是实时竞价
  18. 服务器上文件共享有哪些协议,Windows中的文件共享协议
  19. python3图片处理(笔记)
  20. (试除法+unordered_map+因式分解)acwing 870. 约数个数

热门文章

  1. 出海季收官,速来 Get 全球化发展实操手册
  2. Unity打开照相机与打开本地相册然后在Unity中显示照片(Android与iOS)
  3. android页面背景为视频,安卓手机怎么给视频添加背景图片 上下图片中间视频画面的小视频制作...
  4. matlab tan的反函数输入
  5. 【JAVA】Win10实现Java文件的开机自启动(附详细步骤)
  6. 微信用户授权(微信支付前必须准备)
  7. 应用无法更新,新版本的的版本号(VersionCode)低于之前的版本
  8. 第四章:串、数组和广义表的思维导图
  9. hrbust 1401 九连环(矩阵快速幂)
  10. 函数重载(看了必会)