Python爬虫学习笔记(1.3)爬取网站异步加载数据

异步加载数据:简单的举个例子,有些网页不需要换页,只要网页上的滚动条滑到最下方,它就会自动加载部分数据,和瀑布流一样,可以持续不断的加载数据 ,这些持续加载的数据就属于异步数据(由js控制,和请求网址的Request不是一起的)。

示例网站的URL:https://knewone.com/things/

首先,使用浏览器工具检查,选择Network下的XHR,然后鼠标往下滑,让网页不断的加载数据,观察XHR的变化,如图。

Python爬虫学习笔记(1.3)爬取网站异步加载数据_第1张图片
1F33799E-A4BD-433D-AEB1-E5FB51DF531A.png

实际上不难看出,只是在Request URL的末尾加上了页码后缀。
然后检查元素,鼠标继续往下滑,让它加载数据,然后观察网页源代码的变化。

Python爬虫学习笔记(1.3)爬取网站异步加载数据_第2张图片
89F92588-D667-4D30-8143-3B11DD307995.png

通过观察发现,每次加载数据之后,网页中就会多出几个 class="thing"article标签。然后打开其中的一个 article标签就可以发现我们要爬取的元素。

Python爬虫学习笔记(1.3)爬取网站异步加载数据_第3张图片
A63085A8-FCF1-4EC3-8394-4D8DE4FBB645.png

分析完页面元素之后,下面用代码来实现其中一个页面的爬取。

from bs4 import BeautifulSoup
import requests

url = 'https://knewone.com/things/?page=2'
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')

imgs = soup.select('a.cover-inner > img')
titles = soup.select('section.content > h4 > a')
links = soup.select('section.content > h4 > a')

for img,title,link in zip(imgs,titles,links):
    data = {
        'img':img.get('src'),
        'title':title.get('title'),
        'link':link.get('href')
    }
    print(data)

完成之后接下来做多页面的爬取,并且设计一个自控页码的函数,最终代码如下。

from bs4 import BeautifulSoup
import requests
import time

url = 'https://knewone.com/things/?page='

def get_page(url,data=None):

    wb_data = requests.get(url)
    soup = BeautifulSoup(wb_data.text,'lxml')
    imgs = soup.select('a.cover-inner > img')
    titles = soup.select('section.content > h4 > a')
    links = soup.select('section.content > h4 > a')

    if data==None:
        for img,title,link in zip(imgs,titles,links):
            data = {
                'img':img.get('src'),
                'title':title.get('title'),
                'link':link.get('href')
            }
            print(data)


def get_more_pages(start,end):
    for one in range(start,end):
        get_page(url+str(one))
        time.sleep(1)


get_more_pages(1,8)

你可能感兴趣的:(Python爬虫学习笔记(1.3)爬取网站异步加载数据)