python - 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()
解决方案
您可以创建一个运行 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)
推荐阅读
- python - Google Cloud ML 上传训练模型:输出的外部维度必须未知
- android - 使用 firebase 实时数据库或 firestore 为社交媒体平台设置 rss feed 或 feed
- java - 通过匹配另外两个列表中的条目来创建新的 Java 对象列表
- sql-server - SQL Exists 返回比 IN 更多的记录
- r - 按时间顺序匹配和减去
- .net - HttpClient 为 https 请求强制使用端口 80
- c# - 当列表中基础项目的属性发生更改时更新计算的总计 - wpf
- python - Twilio:创建两个呼出电话并使用 Python 加入会议
- python - 最长公共序列而不是单词
- c# - 选定的索引更改为 ListBox 失败