фрейм данных pandas в python данные поступают неправильно?

#python-3.x #pandas #dataframe #web-scraping #python-requests

#python-3.x #pandas #фрейм данных #очистка веб-страниц #python-запросы

Вопрос:

 import requests
from bs4 import BeautifulSoup
import pandas as pd
start_url="https://www.indeed.co.in/jobs?q=teacheramp;l=India"
page_data=requests.get(start_url)
soup=BeautifulSoup(page_data.content,"html.parser")
Title=[]
Company=[]
Salary=[]
Summary=[]
Location=[]
link_to_apply=[]

for job_tag in soup.find_all("div",class_="jobsearch-SerpJobCard unifiedRow row result"):
    title=job_tag.find("h2",class_="title")
    company=job_tag.find("span",class_="company")
    location=job_tag.find(class_="location accessible-contrast-color-location").text.strip()
    summary=job_tag.find("div",class_="summary")
    link=job_tag.find("a",href=True)
    base_url="https://www.indeed.com"
    final_link=base_url link["href"]

    Title.append(title.text.strip())
    Company.append(company.text.strip())
    Location.append(location)
    Summary.append(summary.text.strip())
    link_to_apply.append(final_link)


data=list(zip(Title,Company,Location,Summary))
p=pd.DataFrame(data,columns=["Title","Company","Location","Summary"])
p.to_csv("new.csv")
pd.set_option("display.max_colwidth",None)
pd.set_option("display.max_rows",None)
pd.set_option("display.max_rows",None)
pd.set_option("display.width",None)
pd.set_option('display.max_columns',None)
  
 the output of the following code

                                                                 Title  
0                                              all Subject Teachernnew   
1                                           Part time Teacher / Trainer   
2   Online Tutor / Teachers - Women Candidates only - Non Metro...nnew   
3                                          Science amp; Maths Teachernnew   
4                                                Primary School Teacher   
5                                                Preschool Teachernnew   
6       Online Tutor / Teachers - Women Candidates only- Across Indi...   
7                                                         Maths Teacher   
8                               wanted faculty for teaching cbse school   
9                                               Primary English Teacher   
10                                                 Training Facilitator   
11                                                         Head Teacher   
12                                                    Math Teachernnew   
13                                                     Teacher for Kids   
14                                            Preschool Teacher - Vizag   

                                                  Company  
0                                               Home Guru   
1                                               Home Guru   
2                 Whitehat Education Technology Pvt. Ltd.   
3                                               Home Guru   
4                       Newdimension International School   
5                                               Home Guru   
6                 Whitehat Education Technology Pvt. Ltd.   
7                            Dheeraj International School   
8   TILFORD SCHOOL,JANGAREDDIGUDEM,W.G.DIST,ANDHRA PRA...   
9                                       Stones2Milestones   
10                                      Stones2Milestones   
11                                           Wunderschool   
12                             GEMS Public School,Patiala   
13                                            ANAR EdTech   
14                                        Koala Preschool   

                                  Location  
0                                   Remote   
1                                   Remote   
2                            Kochi, Kerala   
3                                   Remote   
4                  Bhongir, Andhra Pradesh   
5                      Mumbai, Maharashtra   
6                     Bengaluru, Karnataka   
7                        Pune, Maharashtra   
8   Jangareddi Gudem Bazar, Andhra Pradesh   
9                         Gurgaon, Haryana   
10                        Gurgaon, Haryana   
11                  Chandigarh, Chandigarh   
12                Univ P O Patiala, Punjab   
13                           Kochi, Kerala   
14           Visakhapatnam, Andhra Pradesh   

                                                                                                                                                                Summary  
0    We are recognized leaders in one to one coaching of all subjects amp; Courses, both online and offline.nStudents and Gurus from all across India are invited to get…  
1    We are recognized leaders in one to one coaching of all subjects amp; Courses, both online and offline.nStudents and Gurus from all across India are invited to get…  
2              Teacher, Work from Home, Online Tutor, Teaching, Home Tutor, coding teacher, computer teacher, home teacher, kids teacher.nYou've found your dream job.  
3    We are recognized leaders in one to one coaching of all subjects amp; Courses, both online and offline.nStudents and Gurus from all across India are invited to get…  
4      Proven experience as a teacher.nCollaborate with other teachers, parents and stakeholders and participate in regular meetings.nTotal work: 1 year (Preferred).  
5     We Provide Virtual recorded sessions of Preschool curriculum,.nHave to record Virtual Classes of preschool curriculum.nMust have preschool teaching experience.  
6              Teacher, Work from Home, Online Tutor, Teaching, Home Tutor, coding teacher, computer teacher, home teacher, kids teacher.nYou've found your dream job.  
7                       We are looking for qualified and experienced candidates who can join immediately for the following posts at Dheeraj International School, Pune.  
8                                    WANTED FACULTY FOR TEACHING @CBSE SCHOOL.nSalary not constraint for deserving candidates. *.nSalary: Up to ₹50,000.00 per month.  
9        We are looking to bring into our fold an incredible teacher/facilitator to conduct online classes for children of ages 6-10.nWorking with: Consumer App Team.  
10      We are looking to bring into our fold an incredible teacher/facilitator to conduct online classes for children of ages 6-10.nWorking with: Consumer App Team*.  
11       The Head teacher shall influence the thinking and practice of students, teachers and parents.nPlanning, Documentation , Evaluation, Mentorship, Guidance and12  Welcome to Gems Public School, Patiala...nGEMS is an international education company.nIt is a global advisory and educational management firm, with a network of…  
13     We are* looking for dynamic and vibrant lady tutors with a passion for inspiring our kids to flourish and reach their potentials.nWork at your convenient time.  
14    Our growing Preschool facility is looking for a Young energetic Female Preschool Teacher who can help to create a fun environment and incorporate educational…  
  

я хочу, чтобы вывод находился в соответствующем табличном столбце.Также таблицу необходимо сохранить в ФАЙЛ CSV
вот почему я выбираю pandas. пожалуйста, ответьте быстро и спасибо, ребята
кто-нибудь знает, почему я не получаю правильный фрейм данных? из pandas в качестве вывода
есть ли какой-либо другой способ сделать это?
также в созданном CSV-файле выходные данные поступают правильно, но в python это не так

Комментарии:

1. также видите, что некоторые данные усечены, т. Е. Они отображаются в виде точек, скажите мне, как это исправить

2. Pandas не предназначен для модного вывода. Откройте файл CSV в Excel и сделайте так, чтобы он выглядел так, как вам подходит.

3. @DYZ видите, данные поступают правильно в файл csv в виде правильных столбцов таблицы, но когда я отображаю их в python, они не поступают, и у pandas возникают проблемы с выводом только в обычном режиме ожидания python .. я использую jupyter notebook!

Ответ №1:

По большей части текущий код, похоже, работает. Если вы удалите новые строки, это может помочь. Что касается ‘…’, данные на веб-сайте усекаются. Для перехода по каждой ссылке вам понадобится инструмент веб-автоматизации, такой как Selenium. Вы можете использовать tabulate для форматирования выходной таблицы в консоли.

Вот код с удаленными символами новой строки и исправленными отступами.

 import requests
from bs4 import BeautifulSoup
import pandas as pd

start_url="https://www.indeed.co.in/jobs?q=teacheramp;l=India"
page_data=requests.get(start_url)
soup=BeautifulSoup(page_data.content,"html.parser")
Title=[]
Company=[]
Salary=[]
Summary=[]
Location=[]
link_to_apply=[]

for job_tag in soup.find_all("div",class_="jobsearch-SerpJobCard unifiedRow row result"):
    title=job_tag.find("h2",class_="title")
    company=job_tag.find("span",class_="company")
    location=job_tag.find(class_="location accessible-contrast-color-location").text.strip()
    summary=job_tag.find("div",class_="summary")
    link=job_tag.find("a",href=True)
    base_url="https://www.indeed.com"
    final_link=base_url link["href"]

    Title.append(title.text.replace('n'," ").strip())
    Company.append(company.text.replace('n'," ").strip())
    Location.append(location.replace('n'," "))
    Summary.append(summary.text.replace('n'," ").strip())
    link_to_apply.append(final_link.replace('n'," "))
    
data=list(zip(Title,Company,Location,Summary))
p=pd.DataFrame(data,columns=["Title","Company","Location","Summary"])
p.to_csv("new.csv", index=False)
pd.set_option("display.max_colwidth",None)
pd.set_option("display.max_rows",None)
pd.set_option("display.max_rows",None)
pd.set_option("display.width",None)
pd.set_option('display.max_columns',None)
pd.options.display.max_colwidth = None
print(p.to_string(index=False))

# from tabulate import tabulate
# print(tabulate(p, headers='keys', tablefmt='psql'))  # terminal
#p   # Jupyter only, direct output
print(formatdf(p, 25))   # Idle
  

Вывод (Jupyter, усеченный)

Jupyter

Для Idle мне пришлось написать функцию для форматирования данных. Это перенесет данные столбца в фрейм данных на основе максимальной ширины столбца.

 def formatdf(df, mxcolwidth):
    outstr = ''
    for c in df.columns:
        df[c] = df[c].str.wrap(mxcolwidth)  # insert newlines
        
    # get max width for each column
    wdic = {}
    for c in df.columns:
       s = df[c]
       mx = 0
       for r in s:
           for ln in r.split('n'):
               if len(ln) > mx:
                   mx = len(ln)
       wdic[c] = mx  # dictionary, max line length of each column

    # create row divider string 
    rowstr = ''
    for c in df.columns:
        rowstr  = '-' * (wdic[c])
    rowstr  = '-' * (len(df.columns)*3)   '-n'


    outstr  = '| '  # start row line
    # column headers
    for c in df.columns:
        outstr  = c.ljust(wdic[c])   ' | '
    outstr  = 'n'
    outstr  = rowstr
    
    # each row in dataframe
    for ir, r in df.iterrows():
        mxln = 0
        for c in df.columns:  # get mxx lines for this data row
            lncnt = len(r[c].split('n'))
            if lncnt > mxln: mxln = lncnt
            
        for i in range(mxln): # for each line in data cell
            for ic, c in enumerate(df.columns):  # each column
                if ic == 0: outstr  = '| '   # left border of table
                lns = r[c].split('n')  # split, each line of text in data cell
                if i < len(lns):
                    outstr  = lns[i].ljust(wdic[c])   ' | '  # single line of text
                else:
                    outstr  = " ".ljust(wdic[c])   ' | '   # empty line
            outstr = "n"
        outstr  = rowstr  # row divider
              
    return outstr
  

Вывод (бездействующий, усеченный)

 | Title                     | Company                   | Location                 | Summary                   | 
----------------------------------------------------------------------------------------------------------------
| Online Tutor / Teachers - | Whitehat Education        | Srinagar, Jammu and      | Teacher, Work from Home,  | 
| Women Candidates only -   | Technology Pvt. Ltd.      | Kashmir                  | Online Tutor, Teaching,   | 
| Non Metro... new          |                           |                          | Home Tutor, coding        | 
|                           |                           |                          | teacher, computer         | 
|                           |                           |                          | teacher, home teacher,    | 
|                           |                           |                          | kids teacher. You've      | 
|                           |                           |                          | found your dream job.     | 
----------------------------------------------------------------------------------------------------------------
| Post Graduate Teacher and | North Eastern Railway     | Gorakhpur, Uttar Pradesh | North Eastern Railway     | 
| Trained Graduate Teacher  |                           |                          | Recruitment 2020 - Post   | 
| new                       |                           |                          | Graduate Teacher and      | 
|                           |                           |                          | Trained Graduate Teacher  | 
|                           |                           |                          | Vacancies - Apply         | 
|                           |                           |                          | NowNorth Eastern Railway  | 
|                           |                           |                          | Recruitment 2020-21:…     | 
----------------------------------------------------------------------------------------------------------------
  

Комментарии:

1. привет, спасибо за ваш ответ .. 1 вопрос, хотя, почему я не могу просмотреть всю таблицу, которая была напечатана с использованием tabulate как в моем python idle, так и в jupyter notebook. но когда я просто скопировал код для ответа на ваш ответ в stackoverflow, он загружал правильную таблицу с полосами прокрутки справа и ниже. почему тогда это не появилось в записной книжке jupyter?

2. вы пробовали вывод в jupyter notebook или каким-либо другим способом..

3. извините за опечатки в комментарии!!

4. Если я просто добавлю p в нижнюю часть скрипта в jupyter, он будет работать нормально.

5. да, это работает. спасибо !!… есть ли способ, чтобы таблица также работала должным образом в jupyter notebook, просто спрашивая, знаете ли вы