Python 递归遍历网站所有 url

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

想写一个脚本,遍历带有域名的 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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册