使用python爬取微博数据,使用的代理是蜻蜓代理的隧道代理,包天17元。使用的是request库。有些网页因为网络等原因打不开,总共获取到了76000+数据,没有爬取评论。评论部分的代码调试没有问题,在实际爬取的时候总是报错,可以确定的是代码没问题,可能是网页的问题,可以加一个异常处理,不想写了,评论爬下来也没有很大价值。
这次爬取给我最大的感受就是不可能爬到所有信息,之前没加异常处理总是爬到一半中断了,加了异常处理之后舍弃了那些打不开的网址,整个数据爬取就顺利得多了。
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 2 02:33:00 2020
@author: .....
"""
"""
每一条微博的div个数不同,还是要遍历各个div,至少有两个div
所有url的搜索关键词都是“肺炎”
"""
from lxml import etree
#import requests
import re
from datetime import datetime,timedelta
#import pandas as pd
from openpyxl import Workbook
from urllib import request
import time,random
#获取要爬取的日期列表
def gen_dates(b_date, days):
day = timedelta(days=1)
for i in range(days):
yield b_date + day*i
def get_date_list():
"""
获取日期列表
:param start: 开始日期
:param end: 结束日期
:return:
"""
start = datetime.strptime("xxxx-xx-xx", "%Y-%m-%d").date()
end = datetime.strptime("xxxx-xx-xx", "%Y-%m-%d").date()
#.date()可以只截取日期
datelist = []
for d in gen_dates(start, (end-start).days):
d = str(d).replace('-','')
datelist.append(d)
return datelist
#这个函数来得到指定首尾的中间字符串
def GetMiddleStr(content,startStr,endStr):
patternStr = r'%s(.+?)%s'%(startStr,endStr)
p = re.compile(patternStr,re.IGNORECASE)
m= re.search(p,content)
if m:
return m.group(1)
#这个函数来从博文中得到点赞转发评论量以及时间
def count(strtext):
matchresult = []
matchresult.append(int(GetMiddleStr(strtext,'赞\[',']\xa0')))#点赞量
matchresult.append(int(GetMiddleStr(strtext,'转发\[',']\xa0')))#转发量
matchresult.append(int(GetMiddleStr(strtext,'评论\[',']\xa0')))#评论量
#时间的正则匹配有点复杂,先搁着
# matchresult.append(GetMiddleStr(strtext,'收藏\xa0',''))#时间
return matchresult
#写进文件时的index
columns1 = ['id','博主','博文','原微博博主','原博文','原博文点赞量','原博文转发量','原博文评论量','转发理由','点赞量','转发量','评论量','发布时间','爬取时间']
#columns2 = ['微博id','评论id','评论内容','评论点赞量']
#工作本
workbook = Workbook()
#微博内容存储的sheet
sheet = workbook.active
sheet.title = "微博内容"
sheet.append(columns1)
#便于知道程序运行到了哪里
cishu = 1
# 代理服务器
proxyHost = "dyn.horocn.com"
proxyPort = "50000"
# 代理隧道验证信息
proxyUser = "....."
proxyPass = "....."
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host": proxyHost,
"port"