Python爬虫实践(一) -- 社交网站用户信息爬取
有用的爬虫实战教程不多,本人学习和开发实为不易,转载还请注明出处。
系列文章:
Python爬虫实践(一) -- 社交网站用户信息爬取
Python爬虫实践(二) -- 爬虫进阶:爬取数据处理、数据库存储
Python爬虫实践(三) -- 用户全量数据爬取、多媒体信息爬取
Selenium爬虫 -- 图片视频的src绝对地址链接分析
Selenium爬虫 -- WebDriver多标签页创建与切换
Selenium爬虫 -- 无界面爬取:无头模式及其他参数
使用Selenium爬取数据时,网页切换之后原先获取的元素变量失效的问题
Python爬取图片时,urllib提示没有属性urlretrieve的问题
MySQL创建新连接时,不能成功连接的问题
Selenium爬虫 -- 元素点击与定位的稳定方式
最终可运行代码已上传:
CSDN下载链接(最终版)
GitHub下载链接
目录
爬虫项目目标
过程原理分析
最终实现代码
爬虫项目目标
给一个某社交网站的用户ID,爬这个用户的所有内容:
比如发帖情况、帖子转发情况,被谁赞,赞的人的名字,评价评论,他的朋友,他的个人信息。
过程原理分析
原理:并不用科学上网,只是理论层次的研究。
简单爬虫脚本:selenium即可。
爬虫框架:**中大量采用异步加载,如果简单收发包必定很多内容是解析不到的,因此这里需要一个JavaScript渲染引擎,这个引擎可以使用selenium + chrome(handless) 。
开发语言:python3 ,python在开发爬虫方面有独特的优势。
开发工具:pycharm, JB公司的pycharm几乎是Python IDE的首选。
程序具体步骤:用户登录。使爬虫保持登录状态。获取用户主页面。获取时间线信息。获取公共主页的发帖信息。获取好友信息。反爬虫的相关操作。
防止封号可以采取的措施:
1、减少并发数,设置发包延时
2、设置代 理 池
3、设置UA
4、设置多用户登录,通过从用户的登录cookie池中随机选取一个作为请求的cookie,在爬虫开始位置导入多个用户的用户名和密码信息,依次登录,登录成功后保存用户cookie到列表,后面每次发包前随机选取一个cookie
5、设置Reuqests函数的等待时间,减慢爬虫运行速度防止由于发包过快导致账号被封
最终实现代码
最终选择使用selenium来简单爬取。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import timeclass FBSpider(object):def __init__(self):print("==============================")# 选择浏览器self.browser = webdriver.Chrome()# browser.implicitly_wait(10)# browser.set_window_size(0,0)# 访问*****网页 # 网络容易出错self.browser.get('网址')time.sleep(1)# 输入模拟登陆的账户密码self.browser.find_element_by_id('email').clear()self.browser.find_element_by_id('email').send_keys('******')self.browser.find_element_by_id('pass').clear()self.browser.find_element_by_id('pass').send_keys('******')time.sleep(1)# 模拟点击登录按钮,两种不同的点击方法try:self.browser.find_element_by_xpath('//button[@id="loginbutton"]').send_keys(Keys.ENTER)except:self.browser.find_element_by_xpath('//input[@tabindex="4"]').send_keys(Keys.ENTER)uid = '******' # 英文idtime.sleep(1)# 用户主页# self.browser.get('网址' + uid) # 数字idself.browser.get('网址' + uid) print('用户最近发帖:')time.sleep(1)div1 = self.browser.find_element_by_class_name('timestampContent') # 名字是F12检查看到的值print('时间:' + div1.text)time.sleep(1)div2 = self.browser.find_element_by_class_name('_4vn1') # 名字是F12检查看到的值print('评论数:' + div2.text)time.sleep(1)div3 = self.browser.find_element_by_class_name('_6qw4') # 名字是F12检查看到的值div4 = self.browser.find_element_by_class_name('_3l3x') # 名字是F12检查看到的值print('第一条评论:' + div3.text + ':' + div4.text)time.sleep(1)div5 = self.browser.find_element_by_class_name('_81hb')print('点赞数:' + div5.text)#self.browser.find_element_by_class_name('_66lg').click()#divs1 = self.browser.find_elements_by_class_name('_6a _6b') # 名字是F12检查看到的值#count = 0#for div in divs1:# print(div.text) # 输出前五个赞过的人的名字# count += 1# if(count == 5):# breakprint('用户已公开的个人信息(概览):')# self.browser.find_element_by_link_text('简介').click()# time.sleep(1)self.browser.get('网址' + uid + '网址')time.sleep(1)divs2 = self.browser.find_elements_by_class_name('_50f8 _2iem') # 空 名字是F12检查看到的值_c24 _50f4for div in divs2:print(div.text) # 输出四个概览 工作、学校、所在地、感情状况divs22 = self.browser.find_elements_by_class_name('_42ef') #非空for div in divs22:print(div.text) # 输出四个概览 工作、学校、所在地、感情状况print('用户已公开的好友信息(好友名字):')# self.browser.find_element_by_link_text('好友').click()# time.sleep(1)self.browser.get('网址' + uid + '网址') time.sleep(1)#divs3 = self.browser.find_elements_by_class_name('_6a _6b') # 名字是F12检查看到的值fsl fwb fcbtx = '//*[@id="pagelet_timeline_app_collection_100025583942713:2356318349:2"]/ul[1]/li[1]/div/div/div/div[2]/div'divs3 = self.browser.find_elements_by_xpath(tx)count = 0for div in divs3:print(div.text) # 输出前五个好友名字#count += 1#if(count == 5):# breakdef main(self):print("==============================")if __name__ == '__main__':spider = FBSpider()spider.main()
问题:
测试时,各个标签元素定位的问题是关键,classname定位并不是一直有效的。
个人主页有数字id与英文 id之分。
公共主页与个人主页差异也很大。
数据过多时,比如好友列表与评论列表,需要考虑下拉刷新与AJAX异步加载的数据包。
另外,网络问题会导致页面加载问题,也会导致数据获取失败。
参考文章:
https://www.cnblogs.com/hanmk/p/8997786.html
https://www.cnblogs.com/LXP-Never/p/11386933.html
https://www.jianshu.com/p/5dd0208f87be
https://www.cnblogs.com/lanuage/p/9125586.html
https://blog.csdn.net/chinwuforwork/article/details/77725959
https://www.jianshu.com/p/fe7329619edd
Python爬虫实践(一) -- 社交网站用户信息爬取相关推荐
- python爬虫实践-01-携程酒店评论的爬取
0 关键 携程网其最大的特点就是:基本上所有的有效数据都是通过Ajax异步请求获取的.本博客的主要内容为: 构造Ajax请求,获得返回的reviews数据,由于返回的数据为JSON格式,很好分析 判定 ...
- Python爬虫实战(十一) B站热门信息爬取(窗口版)| Tkinter实现GUI交互式界面
目录 一.主页面设计 1.1 Tkinter基本介绍 1.2 设计布局 二.查询功能实现 2.1 分区字典构建 2.2 输入日期处理 2.3 书写爬虫函数 三.全部代码 更多信息查询(2021-2-1 ...
- Python爬虫系列之双色球开奖信息爬取
Python基于Beautiful Soup库对双色球开奖信息进行爬取 代码仅供学习交流,请勿用于非法用途 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击 ...
- Python爬虫入门教程 94-100 帮粉丝写Python爬虫之【微信读书书籍信息爬取】
X同学发私信说想要微信读书上的书籍清单做测试用,吓我一跳,原以为是要爬取APP呢,刚换了新笔记本难道要配置新的开发环境,结果是爬取一个PC端的网站,虚惊一场. 爬虫百例教程导航链接 : https:/ ...
- python3爬虫----人人贷散标用户信息爬取
前提 本文基于此篇博文的实现思路以及给出的代码.不得不说,此博主心真的细,这个数据隐藏点都找到了,从而使得此爬虫的实现简单许多. 但我在使用博主代码时,发现人人贷网站有些许改变,于是对应代码我也相应做 ...
- python爬虫实例(政府招标采购信息爬取并写入CSV)
实例目标: 在政府招标采购网上,爬取招标信息,并写入CSV文件,形成招标结果信息表格. 政府招标采购网址: 链接: linkhttp://www.ccgp-hubei.gov.cn/notice/cg ...
- python爬虫入门教程04:招聘信息爬取
前言
- python爬取微博用户正文_基于Python的新浪微博用户信息爬取与分析
基于 Python 的新浪微博用户信息爬取与分析 邓文萍 [摘 要] 摘要:本文设计并实现了一个微博用户信息爬取与分析系统 , 利用 Cookie 实现了用户的模拟登录 , 使用 Python 语言的 ...
- Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片
Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...
- python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取
python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...
最新文章
- 关于PCA算法的一点学习总结
- 北京学习Java培训有哪些比较好
- Ubuntu 11.10 安装Adobe Air 和卸载Air中的软件
- Python 空字符串转化问题:ValueError: invalid literal for int() with base 10: ' ',原因及解决方法。
- access函数_ACCESS中的DLookUp函数是如何运算的?
- 【我想进大厂】Redis夺命连环11问
- 计算机虚拟现实技术论文好写吗,计算机虚拟现实技术论文.docx
- 力扣--48旋转图像(中等)
- html的各种基本标签 fylong,HTML:text标签不工作
- 昆仑通态触摸屏数据转发上传_说说昆仑通态(MCGS)的数组功能
- 13penrose广义逆矩阵(I)
- 数字图像处理笔记⑧——纹理分析
- 富爸爸穷爸爸--读书笔记
- 用arduino uno的串口读取JY61角度传感器的角速度、加速度、角度数据MPU6050
- MySQL默认数据库介绍
- Android如何避免抓包
- ArcGIS Enterprise托管服务/托管服务器/托管数据库-之“托管”理解
- 普元EOS/BPS为什么没有安装成功 ?
- 01005封装的优缺点
- docker存在的意义
热门文章
- live555源码编译(win7+vs2010)
- David Cutler,VMS和Windows NT的首席设计师 (zz.is2120)
- [?]Solaris下两个Oracle同时启动时遇到的问题
- socket 异常类型
- LINQ to SQL集成到应用程序中需考虑的一些问题
- 控制标记符分水岭分割算法 此博文包含图片
- pandas数据处理、绘图
- 向量间的距离和范数到线性空间、赋范空间、內积空间
- 遥感数字图像处理——第三章——空间域处理方法
- 【ArcGIS|空间分析|网络分析】5 计算服务区和创建 OD 成本矩阵