我正在尝试抓取新闻报道的语料库进行分析。我有一个带有URL列表的文本文件,我试图将这些传递给请求,以便可以使用BeautifulSoup抓取该页面。我可以从文本文件中提取网址。但是,我没有正确地将输出传递给request.get()。当我给requests.get()一个明确的URL时,脚本可以正常工作。 我如何正确地将文本文件中的链接列表传递给request.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()
但是,当我尝试从包含链接列表的文本文件中读取内容时,如何将链接传递给request.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'
对我来说,这表明我没有正确传递请求。如果我只是交换像“ https://somewebsite.org/page1”这样的显式定义的url,则脚本可以工作并将段落写入文件。但是,当我在顶部放置一个print(urls)
语句并为request.get()提供一个显式链接,以使其不会中断时,我得到了一个URL列表。但是,该列表的格式为:
['http://examplewebsite.org/page1 \ n','http://examplewebsite.org/page2 \ n','http://examplewebsite.org/page3 \ n']
我认为是 \ n 。我尝试同时运行所有链接,但没有用。同样为了提高可读性,我更希望每个链接都放在单独的行上。 任何有关解决此问题的建议将不胜感激。谢谢。
答案 0 :(得分:0)
为了获得与文件中相同的列表,请在此行
urls = list(f)
应该看起来像这样
urls = f.readlines()
它将返回txt文件中每行的数组,不包含任何“ \ n”
答案 1 :(得分:0)
使用.rstrip()删除“ \ n”解决了该问题。下面的代码可以正常工作,并且可以将一组新闻项目正确地写入单个文本文件。
import requests
from bs4 import BeautifulSoup
f = open('article-list.txt', 'r')
urls_n = list(f)
urls = [url.rstrip("\n") for url in urls_n]
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", "a")
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()