一个关于豆瓣影评的爬虫,涉及:模拟登陆,翻页抓取。直接上代码:

import re
import time
import requests
import xlsxwriter
from bs4 import BeautifulSoup headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36',
'Referer':'https://www.douban.com/accounts/login?source=movie'}
s = requests.Session()
def log_in(login_url):
# 获取验证码并保存到本地
imgdata = s.get("https://www.douban.com/accounts/login?source=movie", headers=headers, verify=False).text
print(imgdata)
pa = re.compile(r'<img id="captcha_image" src="(.*?)" alt="captcha" class="captcha_image"/>')
img_url = re.findall(pa, imgdata)[0]
print(img_url)
picdata = s.get(img_url).content
with open("douban.jpg", 'wb') as f:
f.write(picdata) # 获取随机ID
pa_id = re.compile(r'<input type="hidden" name="captcha-id" value="(.*?)"/>')
capid = re.findall(pa_id, imgdata)[0]
print(capid) capimg = input("输入验证码:") payload = {
"source":"movie",
"redir":"https://movie.douban.com/",
"form_email":"你的邮箱",
"form_password":"你的密码",
"captcha-solution":capimg,
"captcha-id":capid,
"login":"登录"
} # log_url = "https://accounts.douban.com/login"
data1 = s.post(login_url, data=payload, verify=False) # 绕过了SSL验证
print(data1.status_code) i = 0
def get_data(url):
time.sleep(2)
print("#"*50)
global i
print(i)
try:
data = s.get(url, headers = headers).text
print(data)
except:
try:
time.sleep(3)
print("正在尝试重新加载页面...")
data = s.get(url, headers= headers).text
except:
workbook.close()
pass
# print(data) # 解析网页
soup = BeautifulSoup(data, "lxml")
comments = soup.findAll("div", {"class":"comment-item"}) # print(len(comments))
for comment in comments:
i += 1
info = comment.find("span",{"class":"comment-info"}) # get date
date = info.find("span",{"class":""}).get_text()
pa_date = re.compile("\d\d\d\d-\d\d-\d\d")
date = re.findall(pa_date, date)[0]
# print(date)
worksheet.write(i,0,date) # get star
star = info.find("span")["class"][0][-2:-1]
# print(star)
worksheet.write(i,1,star) # get vote
vote = comment.find("span", {"class":"comment-vote"}).find("span").get_text()
# print(vote)
worksheet.write(i,2,vote) # get content
content = comment.find("div", {"class":"comment"}).find("p").get_text()
print(content)
worksheet.write(i,3,content) # 获取下一页的url,递归抓取
pa = re.compile('<a href="?(.*?)" .*? class="next">后一页</a>')
try:
next = str(pa.findall(data)[0]).replace("amp;","")
next_url = "https://movie.douban.com/subject/25958717/comments" + next
print("正在抓取"+next_url+"...")
get_data(next_url)
except:
workbook.close()
pass workbook = xlsxwriter.Workbook('海蒂和爷爷影评.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', 20)
worksheet.set_column('B:B', 10)
worksheet.set_column('C:C', 10)
worksheet.set_column('D:D', 500) login_url = "https://accounts.douban.com/login"
log_in(login_url)
comment_data = get_data("https://movie.douban.com/subject/25958717/comments")
workbook.close()

    这里有两个问题:

  1.首先,登陆的时候,可能会不需要验证码(当然也不会抓到验证码的图片。。),加上try就可以了。

  2.数据抓取不全。。。总是剩下1/5左右的数据抓不到,,目前还未解决,请看到的大神指点!

python3爬虫再探之豆瓣影评数据抓取的更多相关文章

  1. 爬虫再探实战(三)———爬取动态加载页面——selenium

    自学python爬虫也快半年了,在目前看来,我面临着三个待解决的爬虫技术方面的问题:动态加载,多线程并发抓取,模拟登陆.目前正在不断学习相关知识.下面简单写一下用selenium处理动态加载页面相关的 ...

  2. Python爬虫入门教程 29-100 手机APP数据抓取 pyspider

    1. 手机APP数据----写在前面 继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教程 ...

  3. Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider

    1. 虎嗅网文章数据----写在前面 今天继续使用pyspider爬取数据,很不幸,虎嗅资讯网被我选中了,网址为 https://www.huxiu.com/ 爬的就是它的资讯频道,本文章仅供学习交流 ...

  4. Python爬虫入门教程 33-100 电影评论数据抓取 scrapy

    1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论 零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面 ...

  5. 爬虫再探实战(五)———爬取APP数据——超级课程表【四】——情感分析

    仔细看的话,会发现之前的词频分析并没有什么卵用...文本分析真正的大哥是NLP,不过,这个坑太大,小白不大敢跳...不过还是忍不住在坑边上往下瞅瞅2333. 言归正传,今天刚了解到boson公司有py ...

  6. python3爬虫再探之EXCEL

    在爬取数据之后,数据的保存就成为一个新的问题,一般不太大的的数据存储到EXCEL就可以了.这里介绍一个python的第三方库——xlsxwriter. 这个库的安装就不介绍了,pip就可以,不用FQ. ...

  7. python3爬虫再探之EXCEL(续)

    上篇介绍了xlsxwriter的用法,本来想写一下xlrd和xlwt的用法,看到这篇文章——http://blog.csdn.net/wangkai_123456/article/details/50 ...

  8. 爬虫再探实战(四)———爬取动态加载页面——请求json

    还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...

  9. PuppeteerSharp+AngleSharp的爬虫实战之汽车之家数据抓取

    参考了DotNetSpider示例, 感觉DotNetSpider太重了,它是一个比较完整的爬虫框架. 对比了以下各种无头浏览器,最终采用PuppeteerSharp+AngleSharp写一个爬虫示 ...

随机推荐

  1. Qt之QSS(白色靓丽)

    简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 白色靓丽 - 一款漂亮的QSS风格. 你可以直接使用,也可以随意转载,但请务必保 ...

  2. Permutation Sequence [LeetCode]

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  3. hdu5878 I Count Two Three(二分+ 打表)

    题目链接:hdu5878 I Count Two Three 题意:给出一个整数n, 找出一个大于等于n的最小整数m, 使得m可以表示为2^a * 3^b * 5^c * 7^d​​. 题解:打表预处 ...

  4. 分享一个快速的Json(反)序列化开源项目 Jil

    我们不缺少JSON的序列化库,但我们缺少一个性能非常好的库,这对于网站来说非常重要.今天我发现了Jil. 他是开源的代码: https://github.com/kevin-montrose/Jil ...

  5. wordpress+php+mysql 配置

    下载并解压wordpress之后,在mysql新建一个数据库,命名,例如testDB1,然后在IIS中新建虚拟目录,指向wordress所在的目录,删除wordpress目录下的wp-config.p ...

  6. Generic泛型

    1.问题 未使用泛型时,元素的类型不安全:操作麻烦,可能需要强制转换import java.util.ArrayList;import java.util.List;import org.junit. ...

  7. 22. Generate Parentheses——本质:树,DFS求解可能的path

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  8. li排序的两种方法

    1.一般做法 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  9. mysql 索引长度限制

    MyISAM存储引擎引键的长度综合不能超过1000字节 InnoDB单列索引长度不能超过767bytes,联合索引还有一个限制是3072

  10. LoadRunner 文本检查点使用

    在测试时,我们可以根据文本检查点判断事务是否执行正确.   我们在启动流程时,成功返回:   我们检查这个响应结果是否有. int i=0; i=web_reg_find("Text=\&q ...