【问题标题】:Looping multiple URLs <python scraping issue> ( 2 different URL's from same website)循环多个 URL <python 抓取问题>(来自同一网站的 2 个不同的 URL)
【发布时间】:2020-09-21 10:33:22
【问题描述】:

伙计们,所以我有这个网站,我想抓取公司名称,那些是婚礼策划师,基本上,我必须逐个城市/州去获取 URL,然后我必须将它放在我制作的简单代码中朋友的帮助,现在问题实际上是当我尝试将多个URL放入字符串时它不起作用,让我分享一下:

import requests

from bs4 import BeautifulSoup as BS


for x in range(1,200):

        url = 'https://www.theknot.com/marketplace/wedding-planners-suffolk-va?page='

        r = requests.get(url+str(x))
        soup = BS(r.text, 'html.parser')

        #week = soup.select('.LinesEllipsis.vendor-name--55315.primaryBold--a3d1e.body1--24afd')
        week = soup.find_all(class_='LinesEllipsis vendor-name--55315 primaryBold--a3d1e body1--24afd')

        for item in week:
            print(item.text)

for x in range(1,200):

        url = 'https://www.theknot.com/marketplace/wedding-planners-plano-tx?page='

        r = requests.get(url+str(x))
        soup = BS(r.text, 'html.parser')

        #week = soup.select('.LinesEllipsis.vendor-name--55315.primaryBold--a3d1e.body1--24afd')
        week = soup.find_all(class_='LinesEllipsis vendor-name--55315 primaryBold--a3d1e body1--24afd')

        for item in week:
            print(item.text)

所以这背后的逻辑是,从Suffolk-VA 获取公司名称,然后从Plano-TX 获取公司名称,然后将它们合并在一起,这将是最后的练习。但是无论我在 Suffolk-VA 公司之后尝试输入什么,他都会将其删除并仅从 1 个链接提供公司名称(URL)......我被卡住了 -_-

我知道这是非常简单的东西,但我无法破解它哈哈。在我去医院之前,如果有人能帮上忙,那就太好了,我手术后,我要去参加一些关于python的课程。

【问题讨论】:

    标签: python python-3.x web-scraping


    【解决方案1】:

    您的代码包含很多可以避免的重复。由于您要查找的类在每个页面上都是相同的,因此您唯一更改的变量是 url。我们可以在 python 中使用列表推导来创建一个包含不同网站和 url 的简单列表。

    注意:还要尝试检查可用的页面数,这样您就不仅仅是请求一堆空页面

    import requests
    from bs4 import BeautifulSoup as BS
    
    urlList = [f'https://www.theknot.com/marketplace/wedding-planners-suffolk-va?page={i}' for i in range(1,200)] + \
        [f'https://www.theknot.com/marketplace/wedding-planners-plano-tx?page={i}' for i in range(1,200)]
    
    for url in urlList:
        r = requests.get(url)
        soup = BS(r.text, 'html.parser')
    
        week = soup.find_all(class_='LinesEllipsis vendor-name--55315 primaryBold--a3d1e body1--24afd')
        for item in week:
            print(item.text)
    
    

    【讨论】:

    • 是的,我知道重复是个问题,但我做了和你在这里写的一样的代码,但它不起作用,这就是为什么我发布上面的代码(重复),因为即使你在这里提供的也没有'不起作用,它只提供来自第一个 URL(suffolk-va)的结果,它完全忽略了第二个 url(plano-tx),我只是不明白为什么...... - 我认为重复代码可能会提供更好工作结果,但它又丢失了一些东西......
    • 它确实会运行第二个 url,但您可能需要等待一段时间才能开始报告第二个链接。如果你注释掉 urlList 的第一部分并只运行第二个 url,你会看到它给了你一些结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2020-03-02
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多