码迷,mamicode.com
首页 > Web开发 > 详细

关于html的多行匹配,正则re.S的使用(爬取豆瓣电影短评)

时间:2017-10-17 12:08:35      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:mount   tps   comm   ref   文章   stat   taf   pandas   users   

参考链接:http://www.python(tab).com/html/2017/pythonhexinbiancheng_0904/1170.html(去除括号)

       http://blog.csdn.net/eastmount/article/details/51082253

首先本文参考了上述两篇文章,爬取豆瓣电影栏目上“看不见的客人短评”,并将其导入cvs。

关于正则匹配多行html,实际上需要在原有基础上加入re.S。

这样,每行行末尾将通过“\n+空格”的形式呈现出来。

而实际上匹配可以通过.*?直接过滤掉。

详情可看第13行。

另说python的pandas模块,使用DataFrame的to_cvs导入还需要进行编码转换,避免乱码。

 1 #coding=utf-8
 2 import requests
 3 import re
 4 import pandas as pd
 5 headers={
 6     User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36,
 7     Host:movie.douban.com
 8     }
 9 cookies={Cookie:你自己的COOKIE}
10 url=https://movie.douban.com/subject/26580232/comments?status=P
11 html=requests.get(url,headers=headers,cookies=cookies)
12 reg=re.compile(r<a href="(.*?)&amp;status=P".*?class="next">)
13 ren=re.compile(r<span class="comment-info">.*? class="">(.*?)</a>.*?<span>.*?title="(.*?)"></span>.*?<span.*? title="(.*?)">.*?<p class="">(.*?)\n,re.S)
14 while html.status_code==200:
15     url_next=https://movie.douban.com/subject/26580232/comments+re.findall(reg,html.text)[0]
16     keren=re.findall(ren,html.text)
17     data=pd.DataFrame(keren)
18     print(data)
19     print(url_next)
20     data.to_csv(/Users/b1ancheng/Desktop/kerenduanping.csv,header=False,index=False, mode=a+,encoding="utf_8_sig")
21     data=[]
22     keren=[]
23     html=requests.get(url_next,headers=headers,cookies=cookies)

 望兄多提意见,共同进步。

关于html的多行匹配,正则re.S的使用(爬取豆瓣电影短评)

标签:mount   tps   comm   ref   文章   stat   taf   pandas   users   

原文地址:http://www.cnblogs.com/b1ancheng/p/7680282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!