现在的很多网站的页面设计都是初识加载个十几,二十条数据,如果用户把滚动条滚到了底部,再通过ajax去数据库动态加载下一页的数据。那对于这种展现方式的网站,我们Python要怎么去抓取这些数据呢?今天我们就讲解一下用Python如何抓取通过ajax动态加载数据的实现方式。
代码如下:
''' 数据为动态加载(ajax,使用js控制数据) 鼠标滚动(下拉)数据自动显示在页面 通过观察在加载是url的变化,构造出url url:ttps://www.duidaima.com/discover?page=7 ''' import requests from bs4 import BeautifulSoup import time # 通过url发起请求,获取返回的返回的response信息 def getResponseMsg(url): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/68.0.3440.106 Safari/537.36'} try: r = requests.get(url, headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "请求失败" def parseHtml(html): soup = BeautifulSoup(html, 'lxml') # 提取出所在的a标签 imgs = soup.select('a.cover-inner > img') titles = soup.select('h4.title > a') links = soup.select('h4.title > 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) #观察发送请求是的url变化,每刷新出内容/discover?page=7&page=4,page+1 def get_more_page(start, end, url): #设置爬取的页面数 for i in range(start, end): html = getResponseMsg(url+str(i)) parseHtml(html) time.sleep(2) if __name__=='__main__': url = 'https://www.duidaima.com/discover?page=7&page=' #爬取10页数据 get_more_page(1, 10, url)总结:
以上就是用Python抓取动态加载的网页信息的实现方式,其实对于这种所谓的ajax动态加载的数据,核心还是要观察这个ajax加载的数据页面是如何构造的,然后根据网站的构造方式,去模拟构造访问url,从而实现信息的抓取。