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

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. centos7 学习

    1.centos pid文件: 在Linux系统的目录/var/run下面一般我们都会看到很多的*.pid文件.而且往往新安装的程序在运行后也会在/var/run目录下面产生自己的pid文件.那么这些 ...

  2. Scrum项目3.0

    1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. 3. 确定Sprint目标. 3.1 产品负责人概括产 ...

  3. Qt之QThread(深入理解)

    简述 为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程.对于耗时操作如果不使用线程,UI界面将会长时间处于停滞状态,这种情况是用户非常不愿意看到的,我们可以用线程来解决这个问题. 前面,已 ...

  4. CentOS 6.x启动时网卡eth0未激活

    简述 安装CentOS 6.x操作系统后,开机时发现没有网络,最后发现系统启动时未激活网卡 - 因为只有在激活状态的网卡才能去连接网络,进行网络通讯. 简述 激活网卡eth0 激活网卡eth0 执行& ...

  5. hdu---(5038)Grade(胡搞)

    Grade Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Sub ...

  6. java多线程的常用方法(以及注意事项)

    /* * 线程的常用方法 * 1.start(); * 2.run(); * 3.sleep(int millsecond); * 4.isAlive(); -->判断线程是否还在运行 * 5. ...

  7. Java 集合系列 02 Collection架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. Java文件编码格式转换

    转自博文<Java文件编码格式转换>: 默认被转换的格式为GBK,转换成的格式为UTF-8 import info.monitorenter.cpdetector.CharsetPrint ...

  9. 使用TypeScript开发程序

    简介 TypeScript一直发展不错,我们公司在开发新功能时,考虑到程序的可维护性,使用了TypeScript编写浏览器上的程序,我们是从零开始使用TypeScript,甚至我连javascript ...

  10. Oracle 中的 decode

    含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN R ...