首页 > 解决方案 > python 3.6 从列表中获取文本

问题描述

我是一个绝对的初学者,但我已经设法从一些现有的脚本和教程中制作了一个工作脚本。我只想拥有一件事,不幸的是我做不到。

到目前为止,我从一个网站获取数据,例如,“ http://www.example.com/01536496/.../ ”。现在我有一个列表(.csv 或 .txt),第一列中有许多其他数字(或在 txt 文件中,每个数字都在新行中)。现在我想抓取列表中所有数字的网络数据,所以“ http://www.example.com/No_1/.../”、“http://www.example.com/No_2/。 ../ " 等等。

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import datetime

my_url = 'http://www.example.com/104289633/.../'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")

...

更新

例如,我有一个 numbers.txt:05543486 3468169 36189994

现在我想将每个数字放入网址中......

请有人可以帮助我。我会很感激。

更新

在尝试使用安德森的代码后......

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import datetime

# Get list of numbers
with open("numbers.txt") as f:
    content = f.read()
    numbers = content.split()

# Handle each URL in a loop
for number in numbers:
    my_url = 'https://www.immobilienscout24.de/expose/%s#/' %number

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

print(my_url)

page_soup = soup(page_html, "html.parser")

containers = page_soup.find_all("div", {"class":"grid-item padding-desk-right-xl desk-two-thirds lap-one-whole desk-column-left flex-item palm--flex__order--1 lap--flex__order--1"})

filename = "results_"+current_datetime+".csv"
f = open(filename, "w")

headers = "titel##adresse##criteria##preis##energie##beschreibung##ausstattung##lage\n"

f.write(headers)

...

    f.write(titel + "##" + adresse + "##" + criteria.replace("    ", "; ") + "##" + preis.replace("    ", "; ") + "##" + energie.replace("    ", "; ") + "##" + beschreibung.replace("\n", " ") + "##" + ausstattung.replace("\n", " ") + "##" + lage.replace("\n", " ") + "\n")

f.close()

标签: pythonweb-scraping

解决方案


您可以创建一个运行 for 循环的函数,并通过循环在每次迭代时更新 url。作为参数,您可以传递数字列表。例如:

def scrape(numbers):
    for num in numbers:
        my_url = 'http://www.example.com/No_' + str(num) + '/.../'

        uClient = uReq(my_url)
        page_html = uClient.read()
        uClient.close()

        page_soup = soup(page_html, "html.parser")


numbers_list = [1, 2, 3, 4, 5]
scrape(numbers_list)

推荐阅读