Поиск по веб-страницам по ключевым словам и извлечение результатов - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть код, который выполняет поиск по определенным ключевым словам на веб-сайте

Когда я использую print(url, count, the_word), он дает мне результаты, но я не могу преобразовать это в извлекаемый набор данных.Я пытался использовать его, но он выводит только последний результат поиска.

def getLinks(url):
html_page = urlopen(url)
soup = bs(html_page)
links = []


for link in soup.find_all('a', href=True):
    links.append(link.get('href'))

 newlist=[ii for n,ii in enumerate(links) if ii not in links[:n]]
 newlist.insert(0,url)

 return newlist[0:10]

the_words = ['20gb', '10gb']
total_words = []

for the_word in the_words:

 for url in getLinks('https://www.bt.com/'):
    r = requests.get(url, allow_redirects=False)
    soup = bs(r.content.lower(), 'lxml')
    words = soup.find_all(text=lambda text: text and the_word.lower() in text)
    count = len(words)
    words_list = [ ele.strip() for ele in words ]
    for word in words:
        total_words.append(word.strip())

    #print('\nUrl: {}\ncontains {} of word: {}'.format(url, count, the_word))
    print(url, count, the_word)

    results=url,count,the_word
    #df=pd.DataFrame(results, columns=[the_word])
    #df.to_csv(r'C:\Users\nn1\Downloads\Python\trial.csv')
    #print(total_words)

Я хочу экспортировать код print(url, count, the_word) в виде файла CSV, как есть.

1 Ответ

0 голосов
/ 24 сентября 2019

Прежде всего исправьте все отступы и сохраните результат в виде списка.Прочитайте из этого списка и запишите его в CSV.Это один из способов сделать это.

from urllib2 import urlopen
from bs4 import BeautifulSoup as bs
import requests
import csv

def getLinks(url):
    html_page = urlopen(url)
    soup = bs(html_page)
    links = []


    for link in soup.find_all('a', href=True):
        links.append(link.get('href'))
        newlist=[ii for n,ii in enumerate(links) if ii not in links[:n]]
        newlist.insert(0,url)

    return newlist[0:10]

the_words = ['20gb', '10gb']
total_words = []
results = []

for the_word in the_words:
    for url in getLinks('https://www.bt.com/'):
        r = requests.get(url, allow_redirects=False)
        soup = bs(r.content.lower(), 'lxml')
        words = soup.find_all(text=lambda text: text and the_word.lower() in text)
        count = len(words)
        words_list = [ ele.strip() for ele in words]

        for word in words:
            total_words.append(word.strip())

        results.append([url,count,the_word]) #append results in list 

#write result in output csv file        
with open("out.csv", "w") as writeFile:
     for result in results:
        writer = csv.writer(writeFile,delimiter=',')
        writer.writerow(result)
writeFile.close()       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...