python通过静态和动态的方式爬取网站页面URL

本文介绍了如何使用Python爬虫通过静态和动态的方式抓取网站URL。对于静态页面,直接解析HTML获取;而对于动态加载的数据,通过selenium模拟浏览器行为抓取。同时强调了去除重复URL和识别动态页面的重要性。
摘要由CSDN通过智能技术生成

爬取网站所有页面的url,可通过获取<a>标签里面的href的方式,进行递归操作,从而获取到整个网站的url。拿到url后,可请求该url,根据页面返回的状态码来简单验证页面是否可正常打开。这里需要注意的是,需要将抓取到的url进行重复过滤,避免存入重复的url,导致无限递归。

由于不同网页获取数据的方式不同,有的是静态获取,有的是动态获取,所以需要根据网页的类型,使用不同的方法进行数据的抓取。那么,怎么判断是否是通过ajax获取到的数据呢?可以右键查看网页源代码,在源代码中搜索需要的数据,如果能搜索出来,则是静态获取,如果搜索不出来,那么通常是通过ajax请求获取的数据。

下面通过抓取云课堂的页面url的例子来进行简单地示例:

1、静态页面抓取页面url

不是通过ajax请求获取到的数据的url,都可以通过静态的方式抓取。代码如下:

from lxml import etree
import requests
import os

home_url = "https://study.163.com"
HTTP='https:'
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',
}
all_urls = []

def get_url(current_url):
    urls = []
    resp = requests.get(current_url, headers=headers)
    status_code = resp.status_code
    if status_code != 200:
        print("当前页面状态值不等于200!页面url为:%s" %current_url )
        with open("error_url.txt",'a+') as fp:
            fp.write(str(status_code) + "::")
            fp.write(current_url + "\n")
        fp.close()

    htmlElement = etree.HTML(resp.content.decode('utf-8'))
    aList = htmlElement.xpath('//a/@href')
    if len(aList) == 0:
        print("当前页面未检测到url")
        return
    for a in aList:
        if a.startswith("//study.163.com") or a.startswith("/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值