利用获取的 cookie 可以登录:
- https://m.weibo.cn/ # 触屏版
- https://weibo.cn/ # 旧版
- https://weibo.com/ # PC 版
- https://s.weibo.com/ # PC 版 高级搜索
多线程效率说明:
网络爬虫是 IO密集型 程序, 因此采用多线程可以显著提高效率.
相同的搜索实例, 采集 40 页微博, 每页 20 条 博文:
单个线程单个账号共采集 678 条微博, 耗时 345.29462 秒.
data = get_data(search_obj, session_obj1, 1, 40)
两个线程两个账号共采集 684 条微博, 耗时 186.58252 秒.
t1 = SpiderThread(get_data, args=(search_obj, session_obj1, 1, 20))
t2 = SpiderThread(get_data, args=(search_obj, session_obj2, 21, 40))
t1.start()
t2.start()
t1.join()
t2.join()
data = t1.get_result() + t2.get_result()
获取 cookie 并以 json 的格式保存到本地.
怎么使用:
def main():
# 请使用自己的账号
username = '18846426742' # 用户名
password = 'mdavid.cn' # 密码
login = WeiboLogin(username, password)
cookies = login.get_cookie()
cookie_name = 'cookie_' + username # 保存 cookie 的文件名称
data = cookies.get_dict()
save(cookie_name, data)
测试 cookie 能否登录到某个 url.
怎么使用:
html = test.get_page(url)
print(test.is_OK(html))
主要使用微博搜索接口, 通过关键字搜索, 爬取所有的结果.
怎么使用:
def search():
'''
生成一个搜索实例, 参数修改请观察微博搜索的 url.
'''
keyword = '大卫' # 搜索关键字
startTime = '2019-04-22'
endTime = '2019-04-23'
# 微博默认按小时搜索, 我们可以控制时间范围增加查询精度
timescope = f'custom:{startTime}-0:{endTime}-23'
prov = '11' # 省和直辖市
city = '1000' # 城市
region = f'custom:{prov}:{city}'
search_obj = Search(keyword, timescope, region)
return search_obj
注意点:
控制爬虫休眠时间, 避免被封.
如何控制采集精度:
分地区采集, 设置 region 参数;
分时段采集, 一般地, 一次搜索微博会返回 50 页, 每页 20 条微博, 我们可以把时间切成多个, 分别采集, 得到更丰富的数据.
爬取一个用户的全部微博, 可以用来分析该用户并为其打标签.
爬取一条热门微博下的所有评论.
Python3
requests
rsa
pandas
beautifulsoup4
openpyxl
threading
作者: David
2019 年 04 月 19 日