Python 递归遍历网站所有 url

lyyyyyyy · 2020年12月31日 · 最后由 lyyyyyyy 回复于 2021年01月04日 · 7118 次阅读

想写一个脚本,遍历带有域名的 url,检查状态码是否有异常。遇到一个问题,requests 返回的内容里面没有 a 标签。
网页的内容都在这个 div 里面,但是 requests 返回的数据里面为空

import requests
from bs4 import BeautifulSoup

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
resource_list = list()


def get_urls(url):
    r = requests.get(url)
    print(url)
    print(r.text)
    soup = BeautifulSoup(r.text, 'html.parser')
    urls = soup.find_all("a")
    if not urls:
        return
    if urls:
        for i in urls:
            try:
                if i['href'] not in resource_list:
                    status_code = requests.get(i['href']).status_code
                    if status_code not in (200, 0):  # code 不对则打印出来
                        print(i['href'], status_code)

                    if "https://www.mxc.ai/" in i['href']:  # 判断是否含有域名
                        resource_list.append(i['href'])
                        get_urls(i['href'])
            except Exception:
                pass




共收到 7 条回复 时间 点赞

会不会填充内容是通过 js 另外异步请求填充的?requests 获取的只有原始 html 内容,不包含 js 执行部分的效果。

下边还嵌了个 iframe,瞧瞧里边有啥


设计就有问题,都是相对路径,你通过域名判断怎么搞

这种异步去修改 dom 的页面用 requests 去爬就不好弄的了,只有用 node,或者 selenium 这种注入 js 到页面中,然后你也做个异步等待来获取,或者对 dom 进行监听,然后去动态的修改获取到的内容。

对 MarvinWu 回复

你都说了是相对路径,那得到的值就不会只是这一截好吧。。。

对 陈恒捷 回复

对的,改了,换成 selenium 去模拟,谢谢大佬解答

对 Karaser 回复

改成 seleinum 去做了,感谢建议

lyyyyyyy 关闭了讨论 01月06日 13:53
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。