**注,小白,纯属当笔记,有错请指点,谢谢。

本文采用requests库爬取HTML页面,然后用BeautifulSoup库解析网页,再通过re库进行匹配

1.简单介绍一下requests库

#request调用参数
import requests
r = requests.get(url,params=None,**kwargs)  #向服务器请求资源,返回所有内容
r.status_code   #返回200即成功
r.text        #响应的字符串形式
r.encoding     #编码方式
#请求异常
requests.ConnectionError  #连接异常  防火墙等
requests.HTTPError        #http异常
requests.URLRequired
requests.ConnectTimeout    #与远程服务器链接超时
requests.Timeout           #整个过程超时
r.raise_for_status()     #判断访问是否异常**kwargs 参数
params
headers   修改协议头      'user-agent' 模拟各种浏览器访问   {'user-agent':'Mozilla/5.0'}  标准浏览器
json      json格式数据
timeout
data
proxies     代理服务器,防止逆追踪   增加登录认证
cookies#编程时可加入异常判断
try:r = requests.get(url)r.raise_for_status()r.encoding = 'utf-8'
except:print("异常")

2.BeautifulSoup

from bs4 import BeautifulSoup
soup = BeautifulSoup(html格式的信息,'html.parser')
#html格式信息及 requests.get返回的.text文档

3.网页结构

网页源由标签和属性组成,如下所示,具体爬取时可右键网页点击源代码查询
<p  class='title'>...</p>   标签成对出现
<标签 属性>...</标签>       属性由键值对构成,索引标签
from bs4 import BeautifulSoup
soup = BeautifulSoup(html格式的信息,'html.parser')
soup.标签
soup.标签.parent.name   父级名字
索引标签属性
soup.标签.attrs       返回字典型
soup.标签.string       字符串索引内容
soup.find(标签,attrs={属性键值对})
soup.find_all(tag_name,attrs,recursive=True,string)    返回列表tag_name ,attrs 可多个recursive 是否搜索子孙节点
soup.find_all(True)   显示所有标签索引文本信息可在后追加.text

4.网页标签的遍历

遍历方法
下行遍历
1.   .contents  将<tag>的所有子节点存入列表
2.   .children  遍历子节点
3.   .descendants 遍历所有子孙节点      for .. in ..:上行遍历
1.   .parent   父节点
2.   .parents  遍历父节点平行遍历  (同一父节点才可以遍历)不一定返回标签
1.   .next_sibling  返回下一个平行节点
2.   .previous_sibling 返回上一个平行节点
3.   .next_siblings  后续所有平行节点
4.   .previous_sibings 前续所有平行节点

5.正则表达式基本操作

正则表达由字符串和操作符组成
.      匹配任意字符
[]     字符集,对单个字符给出范围 [abc] [a-z]
[^]    非字符集,[]的逆,排除
*     前一个字符0次或无限次扩展   abc*   ab/abc/abcc/abccc...
+            1次或无限次
?          0次或1次
|     或  abc|cdf
{m}   扩展前一个字符m次
{m,n}  扩展前一个 m到n次 产生n-m+1个值
^     ^abc  abc在开头
$    abc$   abc在结尾
()   分组
\d   =[0-9]
\w   =[a-zA-Z0-9_]
\s   白字符  空格/换行等等
\S   非白字符

6.re库

re库功能函数
import re
re.search(pattern,string,flags=0)    搜索与正则表达式一样的地方,返回match对象,提取结果需要用 .group(0)pattern 正则表达式,即我们要找的字符形式string  要匹配的字符库对象,即我们的搜索范围flag = re.I  忽略大小写re.M  ^能匹配每行re.S  .能匹配所有字符 包括换行符(默认不包括换行符)re.match(pattern,string,flags=0)     从字符串开始位置,开始匹配 返回match对象
search和match都只返回一个匹配结果,两者区别是,match只在字符串头匹配,而search是在整个范围匹配 re.findall(pattern,string,flags=0)   搜索字符串,以列表返回所有匹配的对象  返回match对象re.split(pattern,string,maxsplit = 0,flags=0)     按正则表达式,分割maxsplit 最大分割数
re.finditer(pattern,string,flags=0)  返回匹配结果的迭代器
re.sub(pattern,repl,string,counts=0,flags=0)       替代所有符合的子串,返回替换后结果repl  替换的内容counts 最大替换数regex = re.compile(pattern,flags=0)    将正则表达式的字符串形式编译成正则表达式对象     一次编译多次使用,
regex.search(string)
regex.match(string)
regex.findall(string)...  与上为等价形式,上述的函数都可以转化为 regex.上面说到 search等返回的是match, match对象的主要方法有
.string     带匹配对象
.re         正则表达式
.pos        搜索的开始位置
.endpos     搜索的结束位置
.group(0)    匹配后的字符串
.start()      匹配字符串在原字符串的开始位置
.end()                  ...  结束的位置
.span()      开始到结束的位置贪婪匹配
RE库采用贪婪匹配,返回匹配最长的字符串
如re.search(r'PY.*N','PYANBNCNDN')
返回  'PYANBNCNDN'
要采用最小匹配,则需要多加一个?
re.search(r'PY.*?N','PYANBNCNDN')最小匹配方法 ?
+?
*?
??
{m,n}?

7.豆瓣评论信息爬取

def getHTMLinf(url):        #向服务器发起请求import requeststry:r = requests.get(url)r.raise_for_status()r.encoding = 'utf-8'return r.textexcept:print("出现异常")def getLongComment(url):   #获取长评论      因为在评论页并不能获取完整的长评论,因此需要提取单独用户的评论页的评论信息html = getHTMLinf(url)from bs4 import BeautifulSoup as bssoup = bs(html,'html.parser')comment = soup.find('div',attrs={'data-url':url}).textreturn commentdef get_num(soup):      #获取用户IDimport reregx = re.compile('[\d]{6}')sp = soup.find_all('div',attrs = {'class':'review-short'})[0]result = regx.search(str(sp)).group(0) return resultdef getCOMMENTinf(url):   #获取信息的总函数html_inf = getHTMLinf(url)from bs4 import BeautifulSoup as bsimport resoup = bs(html_inf,'html.parser')username_lst = []articlename_lst = []article_lst = []like_lst = []dislike_lst = []reply_lst = []commenttime_lst = []ID_lst = []lst1 = soup.find_all('header',attrs = {'class':'main-hd'})lst2 = soup.find_all('div',attrs = {'class':'main-bd'})count = 0for i in lst1:username_lst.append(i.find('a',attrs={'class':'name'}).string)commenttime_lst.append(i.find('span',attrs={'class':"main-meta"}).text)for i in lst2:articlename_lst.append(i.find('h2').string)like_lst.append(i.find('a',attrs = {'title':'有用'}).text.strip())dislike_lst.append(i.find('a',attrs = {'title':'没用'}).text.strip())reply_lst.append(i.find('a',attrs = {'class':'reply'}).string)regx = re.compile('[\d]{6}')sp = soup.find_all('div',attrs = {'class':'review-short'})[0]result = regx.search(str(sp)).group(0) ID = get_num(i)ID_lst.append(ID)com_url = i.find('a').attrs['href']   #获取评论链接result = [username_lst,commenttime_lst,articlename_lst,article_lst,like_lst,dislike_lst,reply_lst,ID_lst]lstname =['username_lst','ID_lst','commenttime_lst','articlename_lst','article_lst','like_lst','dislike_lst','reply_lst']article_lst.append(getLongComment(com_url))return result,lstnamedef change_datatype(data,lstname,i):     #将得到的数据转为DataFrame格式from pandas import DataFrameimport numpy as npn = len(data[0])result = DataFrame(data,index = lstname,columns = np.arange(i*n,i*n+n) )return resultimport numpy as np
if __name__=='__main__':start_url = 'https://movie.douban.com/subject/1291841/reviews?start='depth = 2     #爬取的页数for i in np.arange(depth):url = start_url+str(i*20)
#         try:data,lstname = getCOMMENTinf(url)if i == 0:result = change_datatype(data,lstname,i)else:result_tem = change_datatype(data,lstname,i)result = result.join(result_tem,how = 'inner')
#         except:
#             print('error')result = result.Tresult.to_csv("C:/Users/Administrator/Desktop/result_commetn.csv")

8.结果

用python爬取豆瓣《教父》影评等信息相关推荐

  1. Python爬取豆瓣电影top250的电影信息

    Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...

  2. 完全小白篇-用python爬取豆瓣电影影评

    完全小白篇-用python爬取豆瓣影评 打开豆瓣电影 随机电影的所有影评网页 跳转逻辑 分析影评内容获取方法 逐一正则提取影评 针对标签格式过于多样的处理 针对提出请求的频率的限制 存储方式(本次sq ...

  3. Python爬取豆瓣《哪吒之魔童降世》影评

    这几天朋友圈,微博都被<哪吒之魔童降世>这部电影刷屏了,有人说它是"国漫之光",上映4天,票房已经突破9亿了.口碑上,影片自点映开分以来,口碑连续十天稳居所有在映影片榜 ...

  4. python爬取豆瓣电影top250_Python爬虫——爬取豆瓣电影Top250代码实例

    利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中 ...

  5. python爬取豆瓣电影top250的代码_Python爬虫——爬取豆瓣电影Top250代码实例

    利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中 ...

  6. python爬取豆瓣影评理论依据_我用Python爬取了豆瓣的影评

    使用Python爬取豆瓣的影评,比爬取网易云简单,因为不需要设置特定的headers,关于网易云说几句,很难爬取,对请求头有着严格的要求,前几年那会还好些. 爬取结果分为:用户名,评价的星级,评论的内 ...

  7. 用python爬取豆瓣影评及影片信息(评论时间、用户ID、评论内容)

    爬虫入门:python爬取豆瓣影评及影片信息:影片评分.评论时间.用户ID.评论内容 思路分析 元素定位 完整代码 豆瓣网作为比较官方的电影评价网站,有很多对新上映影片的评价,不多说,直接进入正题. ...

  8. Python爬取豆瓣网影评展示

    Python爬取豆瓣网影评展示 需要的库文件 requests beautifulsoup wordcloud jieba matplotlib 本文思想 1.访问指定的网页 #获取指定url的内容 ...

  9. python爬虫——Cookie登录爬取豆瓣短评和影评及常见问题

    python爬虫--Cookie登录爬取豆瓣短评和影评 常见问题(本文已解决) 具体步骤 一.获取网页源码 短评.影评 二.解析网页源码及爬取评论 1.短评网页解析 ①确定位置 2.短评爬取 ①名称爬 ...

  10. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

最新文章

  1. 直播卡顿原因详解及优化
  2. open source license主流的开源软件协议介绍
  3. 分享--关于学习的一些事儿
  4. 33 | 关于 Linux 网络,你必须知道这些(上)
  5. python request下载文件_Python3.4.3使用urllib.request下载文件带进度显示
  6. android可扩展列表,android-可扩展列表视图未显示
  7. 数据库事务的概念及其实现原理
  8. 2017.10.7 phi的反函数 失败总结
  9. 力软敏捷开发平台源码7.0.6
  10. go语言[3]-数组
  11. python提取句子_关于python:从句子中提取介词短语
  12. window计算机截屏快捷键,Win7系统电脑截图快捷键是什么?
  13. 计算机键入命令,Win7系统安装软件提示命令行语法错误键入“ 命令/?”怎么办...
  14. Stm32的GPIO驱动继电器
  15. Motorola(二)
  16. 2017.11.17 Demo-stm8+temperature timeing control
  17. 通读JavaScript红皮书(第二三章)
  18. EMV技术学习和研究(七)持卡人验证
  19. 2021Y非理性繁荣
  20. ubuntu20.04 双显卡安装

热门文章

  1. 第十五届全国大学生信息安全竞赛创新实践能力赛
  2. 不要在我寂寞的时候说爱我
  3. 用cv包的VideoCapture提取视频帧
  4. 常用office办公学习资源搜集
  5. 使用VIVADO LICENSE 加密VHDL/Verilog 文件(二)
  6. linux用户环境下进入uboot,嵌入式linux开发uboot移植(一)——uboot项目简介
  7. XBanner实现3D画廊效果
  8. python Lock.acquire(0)的作用
  9. 数据类型转换,格式转化
  10. Pandas第三部分Day5练习题