本文是我在使用网易云课堂学习日月光华老师讲的“Python爬虫零基础入门到进阶实战”课程所做的笔记,如果大家觉得不错,可以去看一下老师的视频课,讲的还是很棒的。

1. 动态网页

所谓动态网页,是跟静态网页相对应的一种网页编程技术。静态网页随着HTML代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非修改页面代码,而动态网页则不然,页面代码虽然没有变化,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生该百年的。
动态网页一般使用叫做AJAX的快速动态创建网页技术,通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对王爷的某部分内容进行更新。

2. 判断一个网页是不是动态网页

  1. 是否在URL不变或者未刷新的情况下,能够加载新的信息。
  2. 网页的源代码结构与显示不同

3. 动态网页的爬取办法

  1. 分析网页请求,查找真实请求的URL
  2. 使用Selenium模拟浏览器行为

4. 实例:爬取搜狗|微信文章



如图,在首页中,下拉会显示加载更多内容那个。在URL未改变的情况加网页发生了变化,由此可知是动态网页
目标:爬取热门栏目前十页内容。
首先,分析网址,当我们第一次点击加载更多内容时,Network显示,会请求1.html
其URL为:https://weixin.sogou.com/pcindex/pc/pc_0/1.html
当我们继续第二次点击加载更多内容时,Network显示,会请求2.html

其URL为:https://weixin.sogou.com/pcindex/pc/pc_0/2.html
继续点击,请求3.html

其URL为:https://weixin.sogou.com/pcindex/pc/pc_0/3.html
由此类推,搜狗|微信首页的加载更多内容是通过请求不同的url来进行加载的。
我们如果爬取前十页内容,只需要根据规律构造URL,进行爬取即可。

import requests
from lxml import etree
# 引入random是为了可以随机的从代理IP中抽取一个IP
import random
# punctuation为标点符号集,为了删除文章题目中的标点符号
from string import punctuation
import re
import timedef download(url):"""下载网址内容,返回选择器:param url: 网址:return: 对应网址选择器"""headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}# 定义代理IP列表time.sleep(2)proxies = [{"HTTPS": "https://117.69.201.218:24907"},{"HTTPS": "https://117.57.91.57:46149"},{"HTTPS": "https://117.91.133.18:9999"},{"HTTPS": "https://183.129.207.78:18118"}]# random.choice 从列表中随机选取一个r = requests.get(url, proxies=random.choice(proxies), headers=headers)# r = requests.get(url, headers=headers)# 设置编码方式r.encoding = 'utf-8'return etree.HTML(r.text)def spider_detail(article_url):"""爬取某一篇文章的标题和内容,并写文件:param article_url: 文章URL"""selector = download(article_url)title = selector.xpath('//h2[@class="rich_media_title"]/text()')[0].strip()content = selector.xpath('string(//*[@class="rich_media_content "])').strip()data_write(content, title)def data_write(content, title):"""保存文章的题目和内容# 在字符串前面加上一个r表示原生字符串# 不转义字符不需要再次被转义# 即字符串均为显示内容,无任何转义内容:param content: 内容:param title: 题目"""title = re.sub(r'[{}]+'.format(punctuation), '', title)with open('./wenzhang/' + title + '.txt', 'wt', encoding='utf-8') as f:f.write(content)print('正在下载:', title)def spider(num):for i in range(1, num+1):url = 'https://weixin.sogou.com/pcindex/pc/pc_0/{}.html'.format(i)selector = download(url)all_article = selector.xpath('/html/body/li')for article in all_article:article_url = article.xpath('div[2]/h3/a/@href')[0]spider_detail(article_url)page_count = input("请输入您想爬取的页数:")
spider(page_count)

运行结果:

实战爬虫:python爬虫学习笔记之爬取搜狗|微信文章——动态网页爬取相关推荐

  1. 爬取搜狗微信文章笔记1

    爬取搜狗微信文章笔记1 错误1 ```pythonprint('https://weixin.sogou.com'+index) TypeError: can only concatenate str ...

  2. python爬虫——使用xpath爬取搜狗微信文章

    缺点:爬取一定数量之后会出现验证码,导致不能继续爬取,需要更换ip才可以继续爬取,或者在浏览器重新输入验证码之后复制cookie后方能继续爬取. import requests from fake_u ...

  3. 自学经验总结+实战:python爬虫的自我修养与每天微信给女朋友发一份直男日报

    直男日报: # 记录在一起多少天 # 爬取女朋友所在城市的天气 # 每天给女朋友一句土味情话 # 爬取Bing主页的壁纸,保存到本地并发送 自学爬虫一个月左右,先用R后用python,看了许多帖子也走 ...

  4. python网络爬虫学习笔记(6)动态网页抓取(一)知识

    文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...

  5. python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  6. 九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解...

    封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import j ...

  7. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  8. python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  9. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  10. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

最新文章

  1. yii2 模型中set_Day184:人脸识别中open-set与close-set
  2. 详解Asp.net MVC DropDownLists
  3. python数据插值_【Python】【数据分析】缺失值处理——插值
  4. python 数据库表结构转为类_顺序表数据结构在python中的应用
  5. 1054. 距离相等的条形码
  6. 消除代码中的坏味道,编写高质量代码
  7. 你需要知道的基础算法知识——STL和基础数据结构(四)
  8. spring boot test [ 2.0.6.RELEASE version ]
  9. torch.nn 介绍(部分)
  10. git 拉取远程的dev分支到本地的dev分支,再跟本地的my分支合并
  11. CSS的行内样式与内联样式,看这篇就够了
  12. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之部署到Linux
  13. 设计模式(二)简单工厂模式
  14. Java版本企业电子招投标采购系统源码——功能模块功能描述+数字化采购管理 采购招投标
  15. 控制过滤器Filter执行顺序
  16. python报错就一定是有错吗_Python-什么是错误的幻数错误?
  17. CAD绘图布局中有部分模型显示不出来怎么办?
  18. 手摸手教你使用srs服务搭建毫秒级延时直播
  19. 线上沉浸式购物,VR购物让店铺营销更有差异化!
  20. 场馆坪效这么低?关键在这两方面

热门文章

  1. 117. php empty()函数坑
  2. windows系统 Git Server git服务器自己搭建 (基于 Gitblit or Gogs )
  3. SpringBoot 1.快速搭建一个 SpringBoot Maven工程
  4. Xcode8上传app一直显示正在处理
  5. 线程、同步异步、队列
  6. SRM596 DIV2 500
  7. HDU 4283 You Are the One(区间DP)
  8. 挖掘经典:几乎被人遗忘的HTML七种用法
  9. atomikos 异常报错(java.lang.NoSuchMethodException)
  10. Thingsboard 3.1.0 - 规则链:外部结点REST API