Pandas не записывает все результаты, он перезаписывает и дает только последний результат - PullRequest
1 голос
/ 13 июля 2020

Я работаю над парсингом веб-страниц, я беру имена из текстового файла построчно, ищу его в Google и вычищаю адреса из результатов. Я хочу добавить этот результат перед соответствующими именами. Это мой текстовый файл a.txt:

0.5BN FINHEALTH PRIVATE LIMITED
01 SYNERGY CO.
1 BY 0 SOLUTIONS

, а это мой код:

import requests
from bs4 import BeautifulSoup
import pandas as pd


USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"

out_fl = open('a.txt','r')
for line in out_fl:
    query = line
    query = query.replace(' ', '+')
    # print(line)
    URL = f"https://google.com/search?q={query}"
    # print(URL)
    headers = {"user-agent": USER_AGENT}
    resp = requests.get(URL, headers=headers)
    if resp.status_code == 200:
        soup = BeautifulSoup(resp.content, "html.parser")
        results = []
        for g in soup.find_all('div', class_="i4J0ge"):
                address = soup.find('span', class_="LrzXr")
                if address:
                    address = (address.text)
                else:
                    print("Not found")
                phone = soup.find('span',class_="LrzXr zdqRlf kno-fv")
                if phone:
                    phone = (phone.text)
                else:
                    print("None")
                company = line
                item = {"company": line.replace('\n',''),"Address" : address,"Phone" : phone}
                # print(item)
                results.append(item)
                print(results)
df = pd.DataFrame(results, columns=["company", "Address", "Phone"])
df.to_excel('filename.xlsx', sheet_name='sheet name', index=False)
out_fl.close()

И я не знаю, где он перезаписывается, пожалуйста, помогите мне. Спасибо.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Этот скрипт создаст CSV с компаниями / телефонами из вашего входного файла a.txt:

import requests
import pandas as pd
from bs4 import BeautifulSoup


headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0'}

with open('a.txt','r') as f_in:
    companies = [line.strip() for line in f_in if line.strip()]

all_data = []
for company in companies:
    print(company)
    soup = BeautifulSoup(requests.get('https://google.com/search', params={'q': company, 'hl': 'en'}, headers=headers).content, 'html.parser')

    address = soup.select_one('.LrzXr')
    if address:
        address = address.text
    else:
        address = 'Not Found'

    phone = soup.select_one('.LrzXr.zdqRlf.kno-fv')
    if phone:
        phone = phone.text
    else:
        phone = 'Not Found'

    all_data.append({"Company": company,"Address": address,"Phone": phone})

df = pd.DataFrame(all_data)
df.to_csv('data.csv')

Производит data.csv (снимок экрана из LibreOffice):

введите описание изображения здесь

1 голос
/ 13 июля 2020

попробуйте это, но вам нужно изменить результаты в соответствии с вашим

import requests
from bs4 import BeautifulSoup
import pandas as pd


USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
df = pd.DataFrame(results, columns=["company","result"])
out_fl = open('a.txt','r')
for line in out_fl:
    query = line
    query = query.replace(' ', '+')
    # print(line)
    URL = f"https://google.com/search?q={query}"
    # print(URL)
    headers = {"user-agent": USER_AGENT}
    resp = requests.get(URL, headers=headers)
    if resp.status_code == 200:
        soup = BeautifulSoup(resp.content, "html.parser")
        results = []
        for g in soup.find_all('div', class_="i4J0ge"):
                address = soup.find('span', class_="LrzXr")
                if address:
                    address = (address.text)
                else:
                    print("Not found")
                phone = soup.find('span',class_="LrzXr zdqRlf kno-fv")
                if phone:
                    phone = (phone.text)
                else:
                    print("None")
                company = line
                item = {"company": line.replace('\n',''),"Address" : address,"Phone" : phone}
                # print(item)
                results.append(item)
                print(results)

                df.loc[query]=[query,results]

                df.to_excel("results.xlsx",sheet_name="result", index=False) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...