近期爬虫学习体会以及爬豆瓣Top250源码实战

我是在B站https://www.bilibili.com/video/BV12E411A7ZQ?p=25里学习的,至今已经可以手写爬豆瓣Top250代码。
先总结其中遇到的问题,
1.对 import re
import urllib.request,urllib.error #制定URL获取网页数据
import urllib.request
import bs4
from bs4 import BeautifulSoup
import xlwt 这些库的引用,有些是pycharm编译器中本身没有的
要去导入



依照上述步骤完成相应库的导入即可。

2.爬虫异常处理(反爬)
出现408则是超时,这里我们可以设置一个time
,在一定时间没获取信息时,自动退出程序。
出现404访问为空,如果的确有这个网站,很可能是被发现了,咱就是被发现了(头大),这时候头部信息处理很重要

第一行告诉对方浏览器你从哪里来
第二行告诉对方你是什么性质,不要直接告诉它你是pycharm2021…

还有一点是,给编译器自动模拟访问的网址也很重要
我一开始是直接去网站 cv的
https://movie.douban.com/top250 这个就一直出现404
“https://movie.douban.com/top250?start=” 换成这个之后就可以了,
这也说明就像头部信息一样,你要伪装的时候,一个标点符号最好都和源网页一样,至于头部信息有不懂的,可以去b我发的那个视频看,那个老师讲得很清楚的。
接下来就发咱的代码,因为第一次学,所以自己多加的注释(废话)也比较多


```python
import re
import urllib.request,urllib.error  #制定URL获取网页数据
import urllib.request
import bs4
from bs4 import BeautifulSoup
import xlwtdef main():baseurl = "https://movie.douban.com/top250?start="#1.爬取网页datalist = getData(baseurl)#2.存储路径savePath = ".\\豆瓣电影Top250.xls"#3.保存数据saveData(datalist,savePath)# askURL("url")#影片的链接
finkLink = re.compile(r'<a href="(.*?)">')     #创建正则表达式的对象,表示规则
#影片的图片
finkImagSrc = re.compile(r'<img.*src="(.*?)"',re.S) #re.S 忽略里面的换行符号
#影片的片名
finkTiele = re.compile(r'<span class="title">(.*)</span>')
#影片的评分
finkRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#评价的人数
finkJudge = re.compile(r'<span>(\d*)人评价</span>')
#找到概况
finkIng = re.compile(r'<span class="inq">(.*)</span>')
#找到影片的相关内容
finkBd = re.compile(r'<p class="">(.*?)</p>',re.S)
def getData(baseurl):datalist = []for i in range(0,10):           #调用   获取网页信息的函数十次url = baseurl + str(i*25)   #得到url->网页对应的信息html = askURL(url)       #保存调用网页的源码#逐一解析数据soup = BeautifulSoup(html,"html.parser")for item in soup.find_all('div',class_="item"):# print(item)data = []#保存一部电影的所有信息item = str(item)link = re.findall(finkLink,item)[0]     #获取影片详情超链接data.append(link)           #通过re库用正则表达式查找特定字符串# print(link)imgSrc = re.findall(finkImagSrc,item)[0]   #获取图片信息data.append(imgSrc)   #添加图片titles = re.findall(finkTiele,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(finkRating,item)[0]       #获取评价信息data.append(rating)judgeNum = re.findall(finkJudge,item)[0]     #获取评价人数data.append(judgeNum)ing = re.findall(finkIng,item)          #获得电影概况if len(ing) != 0:ing = ing[0].replace("。","")    #去掉。data.append(ing)else:data.append("")bd = re.findall(finkBd, 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 = {'Reffer': 'https://www.baidu.com/?tn=49055317_4_hao_pg',"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"    #头部信息要和原网页的信息对应,                                                                                                                                 #特别是 "User-Agent",空格大小写都要对应}#用户代理,本质是告诉浏览器我们能接受什么内容也就是进行伪装data = bytes(urllib.parse.urlencode({'name': 'lee'}), encoding="utf-8")cookies = ''request = urllib.request.Request(url,headers = head,data = data)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 htmldef saveData(datalist,savePath):file = xlwt.Workbook(encoding='utf-8',style_compression = 0) #创建workbook对象,style_compression对格式进行优化sheet = file.add_sheet('0',cell_overwrite_ok=True) #创建工作表,cell_overwrite_ok 执行对原有重复数据的覆盖col = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息")for i in range(0, 8):sheet.write(0, i, col[i])  #列名for i in range(0, 250):print("第%d条" % i)data = datalist[i]          #把数据存进去for j in range(0,8):sheet.write(i+1,j,data[j])file.save(savePath)if __name__ == "__main__":main()print("爬完了")

近期爬虫学习体会以及爬豆瓣Top250源码实战相关推荐

  1. python爬虫:requests和urllib爬豆瓣Top250

    文章目录 前言 一.urllib 二.requests 总结 前言 开始使用urllib模块爬的豆瓣top250感觉太多了,跟着视频做还是由很多看不懂 后来在另外一个视频里找到了一样的项目但是使用re ...

  2. python爬虫学习 之 定向爬取 淘宝商品价格

    python爬虫学习 之 定向爬取 淘宝商品价格 import requests import redef getHTMLText(url):try:r = requests.get(url, tim ...

  3. 7 爬虫学习之反爬与反反爬

    一.常见的反爬手段和解决思路 1.服务器反爬的原因 a.爬虫占总PV(PV是指页面的访问次数,每打开或刷新一次页面,就算做一个PV)比例较高,这样浪费钱(尤其是三月份爬虫[爬虫高峰期]). b.公司可 ...

  4. 基于Java毕业设计学习自律养成小程序后台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计学习自律养成小程序后台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计学习自律养成小程序后台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B ...

  5. java毕业生设计在线学习辅导与答疑系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计在线学习辅导与答疑系统计算机源码+系统+mysql+调试部署+lw java毕业生设计在线学习辅导与答疑系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B ...

  6. 计算机毕业设计Java学习自律养成小程序后台(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java学习自律养成小程序后台(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java学习自律养成小程序后台(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构 ...

  7. JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库 本源码技 ...

  8. JAVA毕业设计英语学习网站设计与实现计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计英语学习网站设计与实现计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计英语学习网站设计与实现计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S ...

  9. 基于JAVA学习互助辅助平台计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA学习互助辅助平台计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA学习互助辅助平台计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

最新文章

  1. Linux基础命令---添加/删除组
  2. 计算机网络高分笔记视频,计算机网络高分笔记(整理).pdf
  3. .Net Core应用搭建的分布式邮件系统设计
  4. leetcode1528. 重新排列字符串
  5. pycharm中设置显示行数
  6. 点亮两个发光管用c语言编辑,第二个试验:用单片机点亮一个闪烁的发光管-----51单片机汇编语言试验教程 - CSDN博客...
  7. php基础系列之 数据的存储和读取
  8. Android UI设计秘笈
  9. yield return 和 Func
  10. 拓端tecdat|R语言代写岭回归ridge regression分析租房价格报告
  11. Java速成(10/30)-多态
  12. 戴钊《自我教练:迈向自我实现之路》读书笔记
  13. css 取偶数节点_CSS选择器:奇偶匹配nth-child(even)
  14. 如何保障企业业务流程的落地实施?
  15. 计算机硬件的组装实践,论文-计算机硬件组装实践.doc
  16. SAP Scripting Tracker基本使用技巧
  17. clipboard剪切板
  18. win10如何隐藏任务栏
  19. elasticSearch常见问题答疑
  20. c++实现文件传输之三:断点续传与多线程传输

热门文章

  1. Leetcode-93. 复原 IP 地址
  2. 如何实现手机远程控制电源开关
  3. 解决VScode终端管理员运行问题
  4. CSS Gird布局用法
  5. 中国移动 烽火HG6543C5光猫 获取超级密码教程
  6. php guzzle,php – 如何使用Guzzle 6记录所有API调用
  7. h5案例分享 华谊电影《老炮儿》约战
  8. 怎么将自己的头像p到特定的背景图_怎么把自己的头像和背景分离出来:用ps抠图...
  9. Android蓝牙音乐(基于Android10)
  10. 【EtherCAT从站(SPI)扩展模块电路分析】