【问题标题】:Loop for automatically webscrape data from few pages循环从几页自动抓取数据
【发布时间】:2019-01-12 22:21:11
【问题描述】:

由于我一直试图弄清楚如何制作循环,但无法从其他线程制作它,我需要帮助。我对此完全陌生,因此编辑现有代码对我来说很难。

我正在尝试从网站上抓取数据。这是我到目前为止所做的,但我必须“手动”插入页面。我希望它自动从 1 到 20 页以 zl/m2 为单位抓取价格,例如:

import requests
from bs4 import BeautifulSoup

link=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=1")
page = requests.get(link).text

link1=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=2")
page1 = requests.get(link1).text

link2=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=3")
page2 = requests.get(link2).text

pages=page+page1+page2+page3+page4+page5+page6

soup = BeautifulSoup(pages, 'html.parser')
price_box = soup.findAll('p', attrs={'class':'list__item__details__info details--info--price'})

prices=[]

for i in range(len(price_box)):
prices.append(price_box[i].text.strip())

prices    

我已尝试使用此代码,但卡住了。我不知道我应该添加什么才能一次从 20 个页面获取输出以及如何将其保存到 csv 文件。

npages=20
baselink="https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona="
for i in range (1,npages+1):
link=baselink+str(i)
page = requests.get(link).text

提前感谢您的帮助。

【问题讨论】:

    标签: python web-scraping


    【解决方案1】:

    Python 对空格敏感,因此任何循环的代码块都需要缩进,如下所示:

    for i in range (1,npages+1):
        link=baselink+str(i)
        page = requests.get(link).text
    

    如果您希望将所有页面放在一个字符串中(因此您可以使用与上面的 pages 变量相同的方法),您可以在循环中将字符串附加在一起:

    pages = ""
    for i in range (1,npages+1):
        link=baselink+str(i)
        pages += requests.get(link).text
    

    要使用结果创建 csv 文件,您可以查看 python 内置 csv module 中的 csv.writer() 方法,但我通常发现使用 print() 写入文件更容易:

    with open(samplefilepath, mode="w+") as output_file:
        for price in prices:
            print(price, file=output_file)
    

    w+ 告诉 python 如果文件不存在则创建文件,如果文件存在则覆盖。 a+ 将追加到现有文件(如果存在)

    【讨论】:

    • 这正是我想要实现的。好像我只错过了“+=”。谢谢。你知道有什么方法可以直接保存到 csv 文件吗?
    • 添加了示例 csv 输出。如果您使用的是 Mac,您的路径将类似于 r"/users/daniellong/Documents/output.csv"。对于 Windows,斜线是另一种方式。 r"C:\users\daniellong\Documents\output.csv"
    猜你喜欢
    • 2018-10-20
    • 2021-07-27
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多