python - 如何用漂亮的汤解析长网页?

标签 python html web-scraping beautifulsoup

我一直在使用以下代码来解析链接 https://www.blogforacure.com/members.php 中的网页。该代码预计会返回给定页面的所有成员的链接。

    from bs4 import BeautifulSoup
    import urllib
    r = urllib.urlopen('https://www.blogforacure.com/members.php').read()
    soup = BeautifulSoup(r,'lxml')
    headers = soup.find_all('h3')
    print(len(headers))
    for header in headers:
       a = header.find('a')
       print(a.attrs['href'])

但是我只从上面的页面获得了前 10 个链接。即使在打印美化选项时,我也只能看到前 10 个链接。

最佳答案

通过向 https://www.blogforacure.com/site/ajax/scrollergetentries.php 端点发出 AJAX 请求来动态加载结果。

使用 requests 在代码中模拟它们维护网络抓取 session :

from bs4 import BeautifulSoup
import requests

url = "https://www.blogforacure.com/site/ajax/scrollergetentries.php"
with requests.Session() as session:
    session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
    session.get("https://www.blogforacure.com/members.php")

    page = 0
    members = []
    while True:
        # get page
        response = session.post(url, data={
            "p": str(page),
            "id": "#scrollbox1"
        })
        html = response.json()['html']

        # parse html
        soup = BeautifulSoup(html, "html.parser")
        page_members = [member.get_text() for member in soup.select(".memberentry h3 a")]
        print(page, page_members)
        members.extend(page_members)

        page += 1

它打印当前页码和每页的成员列表,并将成员名称累积到成员列表中。不发布它打印的内容,因为它包含名称。

请注意,我故意让循环无限循环,请找出退出条件。可能是在 response.json() 抛出错误时。

关于python - 如何用漂亮的汤解析长网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502390/

相关文章:

python - 使用 pandas 将累积 yield 转换为每日 yield

Python 等价于 Matlab 的持久性

html - 更改高度以填充屏幕底部

Python Mechanize ——表单提交——选择正确的表单

python - Pandas - 将两个数据帧中最近的事件与条件连接起来

python - _ctypes.cpython-39-x86_64-linux-gnu.so : undefined symbol: PyFloat_Type in embedded Python loaded with dlopen

html - div 在屏幕上高于父 div 时被截断

javascript - HTML5 + Javascript : Networking for a game

python - 当 Python 写入 CSV 时,脚本会在 csv 文件的 try/except block 中插入新行

javascript - 从抓取的 HTML 中提取 Javascript 对象的正则表达式