使用Python从不同URL的列表中刮取文本

使用Python从不同URL的列表中刮取文本,python,dataframe,web-scraping,beautifulsoup,spacy,Python,Dataframe,Web Scraping,Beautifulsoup,Spacy,我有一个不同URL的列表,我想使用Python从中提取文本。到目前为止,我已经成功地构建了一个脚本,该脚本基于带有关键字的谷歌搜索返回URL,但是现在我想删除这些URL的内容。问题是,我现在正在抓取整个网站,包括布局/样式信息,而我只想抓取“可见文本”。最终,我的目标是搜寻所有这些URL的名称,并将它们存储在一个数据框架中。甚至可能包括某些名字被提及的频率,但这是以后的事了。以下是迄今为止我的代码的一个相当简单的开始: from urllib.request import Request, ur

我有一个不同URL的列表,我想使用Python从中提取文本。到目前为止,我已经成功地构建了一个脚本,该脚本基于带有关键字的谷歌搜索返回URL,但是现在我想删除这些URL的内容。问题是,我现在正在抓取整个网站,包括布局/样式信息,而我只想抓取“可见文本”。最终,我的目标是搜寻所有这些URL的名称,并将它们存储在一个数据框架中。甚至可能包括某些名字被提及的频率,但这是以后的事了。以下是迄今为止我的代码的一个相当简单的开始:

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import requests
from time import sleep
from random import randint
import spacy
import en_core_web_sm
import pandas as pd

url_list = ["https://www.nhtsa.gov/winter-driving-safety", "https://www.safetravelusa.com/", "https://www.theatlantic.com/business/archive/2014/01/how-2-inches-of-snow-created-a-traffic-nightmare-in-atlanta/283434/", "https://www.wsdot.com/traffic/passes/stevens/"]

df = pd.DataFrame(url_list, columns = ['url'])
df_Names = []

# load english language model
nlp = en_core_web_sm.load()

# find Names in text
def spacy_entity(df):    
    df1 = nlp(df)
    df2 = [[w.text,w.label_] for w in df1.ents]
    return df2

for index, url in  df.iterrows():
    print(index)
    print(url)
    sleep(randint(2,5))
    # print(page)
    req = Request(url[0], headers={"User-Agent": 'Mozilla/5.0'})
    webpage = urlopen(req).read()
    soup = BeautifulSoup(webpage, 'html5lib').get_text()
    df_Names.append(spacy_entity(soup))
df["Names"] = df_Names

对于使用BeautifulSoup获取可见文本,已有以下答案:

一旦获得可见文本,如果要提取“名称”(我假设这里的名称指的是“名词”),可以在另一个答案上检查nltk包(或Blob):

一旦应用了这两种方法,就可以将输出摄取到数据帧中

注意:请注意,提取给定HTML的可见文本仍然是一个有待解决的问题。这两篇论文比我更能突出问题,它们都使用了机器学习技术:。
以及他们各自的GitHub,

您好,亲爱的mazzespazze-(顺便说一句,这个名字很酷;))非常感谢您提供了这个伟大的答案。谢谢你的快速帮助!太好了@马拉加很乐意为任何人提供帮助:)我猜你在处理同样的“问题”吗?嗨,亲爱的mazzespazze很高兴听到你的消息:是的,我在处理一些问题-这里我们有一个vbulletin的演示站点:(它是开放的,我们不需要注册,我需要收集收集某个用户xy信息的逻辑(我们需要逻辑).a.收集某个作者的帖子线程-除此之外。-获取作者所涉及的全部(!)线程。当然,这包括浏览所有页面(参见附件图片)-有什么想法吗?!@mazzespazze,谢谢你的输入!第一个链接中的脚本显然可以工作,我想我也可以让第二个脚本为我的事业工作:)