栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

近期爬虫学习体会以及爬豆瓣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 xlwt


def 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'')     #创建正则表达式的对象,表示规则
#影片的图片
finkImagSrc = re.compile(r'(.*)')
#影片的评分
finkRating = re.compile(r'(.*)')
#评价的人数
finkJudge = re.compile(r'(d*)人评价')
#找到概况
finkIng = re.compile(r'(.*)')
#找到影片的相关内容
finkBd = re.compile(r'

(.*?)

',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('(s)?', "", bd) #去掉
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 html def 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("爬完了")


















转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724816.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号