【发布时间】:2020-08-09 08:46:03
【问题描述】:
我正在尝试抓取新闻文章的语料库进行分析。我有一个带有 URL 列表的文本文件,我正在尝试将这些传递给请求,以便可以使用 BeautifulSoup 抓取页面。我可以从文本文件中提取网址。但是,我没有正确地将输出传递给 requests.get()。当我给 requests.get() 一个明确的 url 时,脚本可以正常工作。 如何正确地将文本文件中的链接列表传递给 requests.get()?这是我的工作。
import requests
from bs4 import BeautifulSoup
r = requests.get("https://examplewebsite.org/page1")
coverpage = r.content
soup = BeautifulSoup(coverpage, 'html5lib')
file = open("output.txt", "w")
file.write("ITEM:")
paragraphs = soup.find_all("p")[11:-10]
for paragraph in paragraphs:
file.write(paragraph.get_text())
file.write("\n")
file.write("\n")
file.close()
但是,当我尝试从作为链接列表的文本文件中读取数据时,我将链接传递给 requests.get() 的方式似乎存在问题。每行一个 URL,链接的文本文件列表看起来像
https://examplewebsite.org/page1
https://examplewebsite.org/page2
https://examplewebsite.org/page3
https://examplewebsite.org/page4
这是我试图通过链接列表工作的方式。
f = open('article-list.txt', 'r')
urls = list(f)
for url in urls:
import requests
from bs4 import BeautifulSoup
r = requests.get(url)
coverpage = r.content
soup = BeautifulSoup(coverpage, 'html5lib')
file = open("output.txt", "w")
file.write("ITEM:")
paragraphs = soup.find_all("p")[11:-10]
for paragraph in paragraphs:
file.write(paragraph.get_text())
file.write("\n")
file.write("\n")
print(paragraph.get_text())
file.close()
我得到的是一个错误提示
AttributeError: 'NoneType' object has no attribute 'get_text'
这表明我没有正确传递请求。如果我只是简单地交换一个明确定义的 url,比如“https://somewebsite.org/page1”,那么脚本就会工作并将段落写入文件。然而,当我在顶部放置 print(urls) 语句并为 requests.get() 提供一个明确的链接以使其不会中断时,我得到了一个 url 列表。但是,该列表的格式为:
['http://examplewebsite.org/page1\n', 'http://examplewebsite.org/page2\n', 'http://examplewebsite.org/page3\n']
我认为 \n 是问题所在。我尝试将所有链接一起运行,但没有成功。同样为了可读性,我更喜欢将每个链接放在单独的行上。 任何有关如何解决此问题的建议将不胜感激。谢谢。
【问题讨论】:
-
您是否尝试使用 str 方法删除 \n。 rstrip('\n') ?
-
所以我尝试了
page_url = url_list.rstrip("\n")导致“AttributeError:'list' 对象没有属性'rstrip'”。我还尝试了r = requests.get(page_url.rstrip("\n")),它产生了同样的错误。阅读 rstrip() 似乎是正确的,但我还不确定在哪里放置它。有什么想法吗? -
亲爱的@Sureshmani,这成功了!我的问题是我不知道如何正确使用它。但是,我摆弄了一下,偶然发现了一个解决方案,我将在下面发布。谢谢你的好主意。
标签: python web-scraping python-requests