【问题标题】:Scrape Multiple URLs using Beautiful Soup使用 Beautiful Soup 抓取多个 URL
【发布时间】:2017-03-30 11:50:39
【问题描述】:

我正在尝试从多个 URL 中提取特定的类。标签和类保持不变,但我需要我的 python 程序来抓取所有内容,因为我只需输入我的链接。

这是我的工作示例:

from bs4 import BeautifulSoup
import requests
import pprint
import re
import pyperclip

url = input('insert URL here: ')
#scrape elements
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

#print titles only
h1 = soup.find("h1", class_= "class-headline")
print(h1.get_text())

这适用于单个 URL,但不适用于批量。谢谢你帮助我。我从这个社区学到了很多东西。

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    有一个 url 列表并遍历它。

    from bs4 import BeautifulSoup
    import requests
    import pprint
    import re
    import pyperclip
    
    urls = ['www.website1.com', 'www.website2.com', 'www.website3.com', .....]
    #scrape elements
    for url in urls:
        response = requests.get(url)
        soup = BeautifulSoup(response.content, "html.parser")
    
        #print titles only
        h1 = soup.find("h1", class_= "class-headline")
        print(h1.get_text())
    

    如果您要提示用户输入每个站点,那么可以这样做

    from bs4 import BeautifulSoup
    import requests
    import pprint
    import re
    import pyperclip
    
    urls = ['www.website1.com', 'www.website2.com', 'www.website3.com', .....]
    #scrape elements
    msg = 'Enter Url, to exit type q and hit enter.'
    url = input(msg)
    while(url!='q'):
        response = requests.get(url)
        soup = BeautifulSoup(response.content, "html.parser")
    
        #print titles only
        h1 = soup.find("h1", class_= "class-headline")
        print(h1.get_text())
        input(msg)
    

    【讨论】:

    • 我收到此错误:回溯(最近一次通话最后一次):文件“/Users/Computer/Desktop/test.py”,第 7 行,在 urls = input['website.com/link1','https://website.com/link2'] TypeError: 'builtin_function_or_method' 对象不可下标
    • 你要从用户那里获取每个 url 的输入吗?如果不是,那么只需将所有网址放入列表中,如我的回答所示。不要将列表放入输入法中。
    • 我在考虑用户的输入,用行分隔?
    • 你的意思是你提示用户输入并且用户输入url并输入,它要求下一个url等等util用户说继续,然后才开始处理?
    • 没有。更像是粘贴所有 URL,然后处理并输出所有内容。
    【解决方案2】:

    如果你想批量抓取链接。指定批量大小并对其进行迭代。

    from bs4 import BeautifulSoup
    import requests
    import pprint
    import re
    import pyperclip
    
    batch_size = 5
    urllist = ["url1", "url2", "url3", .....]
    url_chunks = [urllist[x:x+batch_size] for x in xrange(0, len(urllist), batch_size)]
    
    def scrape_url(url):
        response = requests.get(url)
        soup = BeautifulSoup(response.content, "html.parser")
        h1 = soup.find("h1", class_= "class-headline")
        return (h1.get_text())
    
    def scrape_batch(url_chunk):
        chunk_resp = []
        for url in url_chunk:
            chunk_resp.append(scrape_url(url))
        return chunk_resp
    
    for url_chunk in url_chunks:
        print scrape_batch(url_chunk)
    

    【讨论】:

    • 如果我想将每个 url 的请求间隔为 10,我该怎么做?而且我不熟悉 url 块,它们的目的是什么?
    • 用于间隔请求导入时间并在 scrape_url 函数中使用 time.sleep(10)。 url_chunks 是一个变量,它是一个包含 url 列表的 python 列表。例如:[['www.website1.com', 'www.website2.com'],['www.website3.com','www.website3.com']]
    猜你喜欢
    • 2018-10-19
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2018-07-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多