【问题标题】:Scrape text from a list of different urls using Python使用 Python 从不同 url 列表中抓取文本
【发布时间】:2021-05-13 00:39:16
【问题描述】:

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

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

【问题讨论】:

    标签: python dataframe web-scraping beautifulsoup spacy


    【解决方案1】:

    为了使用 BeautifoulSoup 获取可见文本,已经有这个答案: BeautifulSoup Grab Visible Webpage Text

    一旦你得到你的可见文本,如果你想提取“名字”(我在这里假设你的名字是指“名词”),你可以在这个其他答案上检查 nltk 包(或 Blob):Extracting all Nouns from a text file using nltk

    应用两者后,您可以将输出提取到 pandas DataFrame 中。

    注意:请注意,在给定 HTML 的情况下提取可见文本仍然是一个悬而未决的问题。这两篇论文可以比我更好地突出问题,它们都使用机器学习技术:https://arxiv.org/abs/1801.02607https://dl.acm.org/doi/abs/10.1145/3366424.3383547。 以及他们各自的githubhttps://github.com/dalab/web2texthttps://github.com/mrjleo/boilernet

    【讨论】:

    • 您好,亲爱的 mazzespazze - (非常酷的名字,顺便说一句;))非常感谢您提供这个很好的答案。感谢您的快速帮助!太好了!!!
    • @malaga 很高兴为任何人提供帮助 :) 我猜您正在以某种方式处理相同的“问题”?
    • 嗨亲爱的 mazzespazze 很高兴收到你的来信:是的,我正在处理一些问题 - 这里 stackoverflow.com/questions/66111803/… 这里我们有一个 vbulletin 的演示站点:(它是开放的,我们不需要注册我需要收集收集某个用户 xy 信息的逻辑(我们需要逻辑)。a. 收集某个作者的帖子线程 - 除此之外。 - 获取整个(!)线程涉及作者。这当然包括浏览所有页面(见附图)。-有什么想法吗?!
    • @mazzespazze,感谢您的意见!第一个链接中的脚本显然有效,我想我也可以让第二个脚本为我的事业工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2011-07-16
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多