美文网首页大数据 爬虫Python AI SqlPython小哥哥
如何爬取翻页url不变的网站!你不变我就爬不了吗?

如何爬取翻页url不变的网站!你不变我就爬不了吗?

作者: 14e61d025165 | 来源:发表于2019-04-23 14:41 被阅读0次

之前打算爬取一个图片资源网站,但是在翻页时发现它的url并没有改变,无法简单的通过request.get()访问其他页面。据搜索资料,了解到这些网站是通过ajax动态加载技术实现。即可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

这样的设置无疑给初期爬虫新手制造了一些困难。

可以添加QQ群1004391443,有飞机大战、颜值打分器、打砖块小游戏、红包提醒神器、小姐姐表白神器等具体的实训项目,有清晰源码,有相应的文件

1、什么是ajax

几个常见的用到ajax的场景。

比如你在逛知乎,你没有刷新过网页,但是你却能看到你关注的用户或者话题有了新动态的消息提示。

还比如,我们在看视频时,可以看到下面的评论没有完全全部加载出来,而是你向下拖动一点,它给你加载一点。

从上述场景你应该也可以发现它的优点:

  1. 方便与用户的交互,不用重新加载整个网页,就可以实现刷新,不用中断用户的行为。你正在看程序员如何找对象呢,此时来个消息推送,整个网页被刷新了,你说你气不气!
  2. 还是你在看程序员如何找对象,但是此时通信状况不好啊。回答加载不出来,页面就空白的卡那了,回答加载不出来,你说急不急!那这样咯,先给你看几个回答,在你看的时候我再悄悄的加载其它的数据,那不就解决了吗?就跟吃饭一个道理,你点了一桌子菜,难道菜全做好了再给你上吗?肯定不会的呀,做好一道上一道嘛,对不对。
  3. 从服务端的发送过来的ajax数据,体积比较小。浏览器知道怎么渲染它,这样就减轻了服务端的压力,让客户端,也就是浏览器承担了一些任务。

Ajax技术的核心是XMLHttpRequest对象(简称XHR),可以通过使用XHR对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现。虽然名字中包含XML,但Ajax通讯与数据格式无关,所以我们的数据格式可以是XML或JSON等格式。(具体请访问:https://www.w3.org/TR/XMLHttpRequest/

XMLHttpRequest对象用于在后台与服务器交换数据,具体作用如下:

  • 在不重新加载页面的情况下更新网页
  • 在页面已加载后从服务器请求数据
  • 在页面已加载后从服务器接收数据
  • 在后台向服务器发送数据

2、如何爬取ajax动态加载的网页

这里用到的方法是通过分析响应请求,模拟响应参数。再通过requests库的request.post()函数去post相对应的参数即可

具体方法如下:

打开开发者工具,快捷键F12,不行就Fn + F12.

image

标红的1, network, 在其中可以看到服务器加载过来的资源。

标红的2, 是一个过滤器,你可以按照文件格式筛选。

标红的3,是加载过来的具体文件。

image

Headers中的request method 中显示我们使用的是POST方法。

而且FROM Data 中有一个参数,page。

利用Form Data 中的数据,编写一个字典,赋值给requests.post()中的data即可

接下来就可以正常访问和翻页了!

更为具体的信息可见:https://zhuanlan.zhihu.com/p/27346009,很感谢其提供的思路和帮助

附源码

<pre style="margin: 0px; padding: 0px; border: 0px; font: inherit; vertical-align: baseline; word-break: break-word;">

import requests
import os
import re

def get_page(url,page_num):
 pageList =[]
 for i in range(1,page_num +1):
 formdata ={'type':'index' ,
 'paged': i}
 try:
 r = requests.post(url,data =formdata)
 r.raise_for_status()
 r.encoding = r.apparent_encoding
 print('链接成功')
 p = re.compile(r'href="(http://www.jdlingyu.net/\d{5}/)"')
 tempList = re.findall(p,r.text)
 for each in tempList:
 pageList.append(each)
 print('保存页面成功')
 tempList = []
 except:
 print('链接失败')
 print(pageList)
 return pageList

def get_picure(pageList):
 picList = []
 for each in pageList:
 try:
 r = requests.get(each,headers = kv)
 r.raise_for_status()
 r.encoding = r.apparent_encoding
 p = re.compile('http://img.jdlingyu.mobi/[^"]+\.jpg|http://w[wx][23].sinaimg.cn/[^"]+\.jpg')
 tempList = re.findall(p,r.text)
 for each in tempList:
 picList.append(each)
 print('保存图片链接成功')
 tempList = []
 except:
 print('保存图片链接失败')
 return picList
def down_picture(picList,root):
 picList = list(set(picList))
 if not os.path.exists(root):
 os.mkdir(root)
 for each in picList:
 path = root + each.split('/')[-1]
 if not os.path.exists(path):
 r = requests.get(each,headers = kv)
 r.raise_for_status()
 with open(path,'wb') as f:
 f.write(r.content)
 print('动图已保存')
 else:
 print('动图已存在')

url = 'http://www.jdlingyu.net/'
kv = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}
root = 'D://绝对领域//'
pageList = get_page(url,2)
picList = get_picure(pageList)
down_picture(picList,root)

</pre>

相关文章

  • 如何爬取翻页url不变的网站!你不变我就爬不了吗?

    之前打算爬取一个图片资源网站,但是在翻页时发现它的url并没有改变,无法简单的通过request.get()访问其...

  • Scrapy学习——深度优先和广度优先

    爬取的过程 爬取网站前首先要对其网站的url结构进行分析,遇到已经爬取过的网址会将其加入已经爬取的列表中,避免重复...

  • requests/lxml/aiohttp/aiohttp_re

    requests r=requests.get(url,params,**kwargs) url: 需要爬取的网站...

  • scrapy翻页

    参考链接 普通方式翻页1 方法一:定义URLs超链接列表单分别爬取 方法二:拼接不同网页URL并发送请求爬取 方法...

  • 爬虫入门01-获取网络数据的原理作业

    作业: 要爬取的数据类别 对应的数据源网站 爬取数据的URL 数据筛选规则 我的答案是这样的: 要爬取的数据是豆瓣...

  • 爬虫入门01作业

    课堂作业 要爬取的数据类别 对应的数据源网站 爬取数据的URL 数据筛选规则(选做) 要爬取的数据类型 我对金融行...

  • 爬虫

    URL管理器:管理待爬取的url集合和已爬取的url集合,传送待爬取的url给网页下载器。网页下载器(urllib...

  • 利用python爬取股票交易数据

    利用python爬取股票交易数据 分析网站 找到返回的url 爬取股票交易数据 思路,我们利用request来请求...

  • 简单的爬虫架构

    URL管理器对将要爬取的url和已经爬取过的url进行管理。取出待爬取的url传给网页下载器。网页下载器将url指...

  • 第六章 spider批量爬取伯乐在线所有文章

    如何通过spider完成伯乐在线上大量文章的批量爬取 首先,我们需要通过列表页爬取所有文章的url,前面部分只爬取...

网友评论

    本文标题:如何爬取翻页url不变的网站!你不变我就爬不了吗?

    本文链接:https://www.haomeiwen.com/subject/ywuvgqtx.html