有用的爬虫实战教程不多,本人学习和开发实为不易,转载还请注明出处。

系列文章:

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爬虫实践(一) -- 社交网站用户信息爬取相关推荐

  1. python爬虫实践-01-携程酒店评论的爬取

    0 关键 携程网其最大的特点就是:基本上所有的有效数据都是通过Ajax异步请求获取的.本博客的主要内容为: 构造Ajax请求,获得返回的reviews数据,由于返回的数据为JSON格式,很好分析 判定 ...

  2. Python爬虫实战(十一) B站热门信息爬取(窗口版)| Tkinter实现GUI交互式界面

    目录 一.主页面设计 1.1 Tkinter基本介绍 1.2 设计布局 二.查询功能实现 2.1 分区字典构建 2.2 输入日期处理 2.3 书写爬虫函数 三.全部代码 更多信息查询(2021-2-1 ...

  3. Python爬虫系列之双色球开奖信息爬取

    Python基于Beautiful Soup库对双色球开奖信息进行爬取 代码仅供学习交流,请勿用于非法用途 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击 ...

  4. Python爬虫入门教程 94-100 帮粉丝写Python爬虫之【微信读书书籍信息爬取】

    X同学发私信说想要微信读书上的书籍清单做测试用,吓我一跳,原以为是要爬取APP呢,刚换了新笔记本难道要配置新的开发环境,结果是爬取一个PC端的网站,虚惊一场. 爬虫百例教程导航链接 : https:/ ...

  5. python3爬虫----人人贷散标用户信息爬取

    前提 本文基于此篇博文的实现思路以及给出的代码.不得不说,此博主心真的细,这个数据隐藏点都找到了,从而使得此爬虫的实现简单许多. 但我在使用博主代码时,发现人人贷网站有些许改变,于是对应代码我也相应做 ...

  6. python爬虫实例(政府招标采购信息爬取并写入CSV)

    实例目标: 在政府招标采购网上,爬取招标信息,并写入CSV文件,形成招标结果信息表格. 政府招标采购网址: 链接: linkhttp://www.ccgp-hubei.gov.cn/notice/cg ...

  7. python爬虫入门教程04:招聘信息爬取

    前言

  8. python爬取微博用户正文_基于Python的新浪微博用户信息爬取与分析

    基于 Python 的新浪微博用户信息爬取与分析 邓文萍 [摘 要] 摘要:本文设计并实现了一个微博用户信息爬取与分析系统 , 利用 Cookie 实现了用户的模拟登录 , 使用 Python 语言的 ...

  9. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  10. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

最新文章

  1. 关于PCA算法的一点学习总结
  2. 北京学习Java培训有哪些比较好
  3. Ubuntu 11.10 安装Adobe Air 和卸载Air中的软件
  4. Python 空字符串转化问题:ValueError: invalid literal for int() with base 10: ' ',原因及解决方法。
  5. access函数_ACCESS中的DLookUp函数是如何运算的?
  6. 【我想进大厂】Redis夺命连环11问
  7. 计算机虚拟现实技术论文好写吗,计算机虚拟现实技术论文.docx
  8. 力扣--48旋转图像(中等)
  9. html的各种基本标签 fylong,HTML:text标签不工作
  10. 昆仑通态触摸屏数据转发上传_说说昆仑通态(MCGS)的数组功能
  11. 13penrose广义逆矩阵(I)
  12. 数字图像处理笔记⑧——纹理分析
  13. 富爸爸穷爸爸--读书笔记
  14. 用arduino uno的串口读取JY61角度传感器的角速度、加速度、角度数据MPU6050
  15. MySQL默认数据库介绍
  16. Android如何避免抓包
  17. ArcGIS Enterprise托管服务/托管服务器/托管数据库-之“托管”理解
  18. 普元EOS/BPS为什么没有安装成功 ?
  19. 01005封装的优缺点
  20. docker存在的意义

热门文章

  1. live555源码编译(win7+vs2010)
  2. David Cutler,VMS和Windows NT的首席设计师 (zz.is2120)
  3. [?]Solaris下两个Oracle同时启动时遇到的问题
  4. socket 异常类型
  5. LINQ to SQL集成到应用程序中需考虑的一些问题
  6. 控制标记符分水岭分割算法 此博文包含图片
  7. pandas数据处理、绘图
  8. 向量间的距离和范数到线性空间、赋范空间、內积空间
  9. 遥感数字图像处理——第三章——空间域处理方法
  10. 【ArcGIS|空间分析|网络分析】5 计算服务区和创建 OD 成本矩阵