【问题标题】:Python Scraping URL issuePython抓取URL问题
【发布时间】:2015-09-25 16:38:42
【问题描述】:

我正在编写一个简单的 python3 脚本来从 Sourceforge.net 中提取尽可能多的公共存储库。我遇到了一个奇怪的问题,我很好奇它为什么会发生:

这是我的代码

#!/usr/bin/env python3

import time
from requests import get
from bs4 import BeautifulSoup

results = []

for i in range(1,100):
    cur = 'http://sourceforge.net/directory/os%3Alinux/freshness%3Arecently-updated/?page=' + str(i)
    #print(cur + '\n')
    r = get(cur.format(i))
    soup = BeautifulSoup(r.text,'html.parser')
    results += soup.find_all('span',{'itemprop': 'name'})
    for result in results:
        print('Found Project: '.join(result.contents))
    time.sleep(.5)
    results = []

当我从 url 中删除 /os%3Alinux/ 以便拥有更广泛的项目时,就会出现问题......当我这样做时,输出是第 1 页的输出。似乎不提取其他页面。有谁知道为什么会这样?我还从其他人那里得到了 r = get(cur.format(i)) 并且很好奇这实际上在做什么。

【问题讨论】:

    标签: python url web-scraping beautifulsoup


    【解决方案1】:
    http://sourceforge.net/directory/freshness%3Arecently-updated/?page=1
    

    不是有效的 URL。它重定向到:

    http://sourceforge.net/directory/os:windows/freshness:recently-updated/
    

    因此,当您增加计数器时,您总是会重定向回相同的 URL。

    from bs4 import BeautifulSoup
    import requests
    
    
    
    for page in range(1, 100):
       r  = requests.get("http://sourceforge.net/directory/?page=" + str(page))
       data = r.text
       soup = BeautifulSoup(data, "html.parser")
    
       print soup.find_all('span',{'itemprop': 'name'})
    

    【讨论】:

    • 有没有办法去掉 os:windows/os:linux 标签?没有引起问题?如果没有,我可以只运行两个操作系统并删除常用的。不过还是谢谢你的回答
    • 不幸的是,当我更改此 url 时遇到的问题是它不会产生除第一页以外的任何结果
    • 你还在为每一页增加你的计数器吗?
    • @codyjae 我添加了代码来打印每个页面的 html,希望对您有所帮助。
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多