Запросите массив MongoDB через Pymon go и верните только элемент, который похож на указанное значение, в Pandas Dataframe - PullRequest
0 голосов
/ 01 мая 2020

У меня есть база данных MongoDB с документами, которые содержат массив под названием «ссылки» с элементом для каждой веб-страницы, которая была просканирована на предыдущем шаге. Также включены в качестве идентификатора и домена для веб-сайта.

Вот пример документа:

{
"_id": {
    "$oid": "5eabc5085ad3f439d5dc6940"
},
"domain": "http://www.linnlanes.com/",
"links": ["http://www.linnlanes.com/index.html", "http://www.linnlanes.com/ContactUS/contactus.htm", "http://www.linnlanes.com/HoursRates/rates.htm", "http://www.linnlanes.com/Food/Menu.htm", "http://www.linnlanes.com/BowlingSpecials/specials.htm", "http://www.linnlanes.com/BirthdaySpecials/parties.htm", "http://www.linnlanes.com/ProShop/proshop.htm", "http://www.linnlanes.com/Tournaments/tournaments.htm", "http://www.lebanonusbc.org/Leagues/leagues.htm", "http://www.LebanonUSBC.org/", "http://www.linnlanes.com/BowlingSpecials/tacotuesday.htm", "http://www.linnlanes.com/BowlingSpecials/niteowl.htm"]

}

Я пытаюсь вытащить данные в Python Dataframe через pymon go и pandas. Мой пример кода следующий:

import pymongo
import pandas as pd

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["crawler"]
mycol = mydb["links"]
myquery = {"links": {"$regex": u"contact"}}
df = pd.DataFrame(mycol.find(myquery))
print(df['links'])

Когда я запускаю приведенный выше код, я получаю все документы, которые имеют "контакт", в одном из своих элементов "ссылки". Проблема в том, что он тянет каждый элемент «ссылок». Я хочу получить только тот элемент, который содержит «контакт». Я открыт для другого метода выполнения функции «как», кроме регулярного выражения, как показано.

Что я получаю:

0      [http://www.linnlanes.com/index.html, http://w...
Name: links, Length: 414, dtype: object

Что я хочу получить:

0      [http://www.linnlanes.com/ContactUS/contactus.htm]
Name: links, Length: 414, dtype: object

1 Ответ

0 голосов
/ 02 мая 2020

Я был довольно близко, это работает:

import pymongo
import pandas as pd

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["crawler"]
mycol = mydb["links"]
myquery = {"links": {"$regex": u"contact"}}
df = pd.DataFrame(mycol.find({"links": {"$regex": u"contact"}}, {"links.$": 1}))
print(df['links'])
...