Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从多个网页中读取表格,并将其与熊猫组合?_Python_Pandas_For Loop - Fatal编程技术网

Python 如何从多个网页中读取表格,并将其与熊猫组合?

Python 如何从多个网页中读取表格,并将其与熊猫组合?,python,pandas,for-loop,Python,Pandas,For Loop,我尝试了两次使用common for~循环进行web爬行 我希望结果如下所示 Company Title Salary Location Start_date End_date 0 A1 1 A2 2 A3 3 A4 4 A5 5 A6 . . . . . . 6000 A6001 但我的结果如下 Company Title Salary Location Start_d

我尝试了两次使用common for~循环进行web爬行

我希望结果如下所示

    Company  Title  Salary  Location  Start_date  End_date
0      A1
1      A2
2      A3
3      A4
4      A5
5      A6
.      .
.      .
.      .
6000 A6001
但我的结果如下

    Company  Title  Salary  Location  Start_date  End_date
0      A1
1      A2
.      .
.      .
19     A20
20     A1
21     A2
.      .
.      .
我的结果不是得到每一页,而是重复的最后一页(即A1~A20重复了30次)

我不确定我做错了什么

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
from tqdm import tqdm
import datetime


df = pd.DataFrame(columns = ('Company', 'Title', 'Salary', 'Location', 'Start_date', 'End_date'))

for i in tqdm(range(30), mininterval = 1):
    df_list = list()
    for n in range(20):
        print("Now", i, n)
        page = i + 1
        URL ="http://www.sisuljob.com/employ/employ_01.htm?tb=1&sca=&stx1=&stx2=&stx3=&sfl1=&sfl2=&sfl3=&page=" + str(page)
        req = urlopen(URL)
        html = req.read()
        soup = BeautifulSoup(html, 'html.parser')
    
        df.loc[n] = [
            soup.select('.pd10_text > a')[2*n].text,
            soup.select('.pd10_text > a')[(2*n)+1].text,
            soup.select('.text_02 > a')[4*n].text,
            soup.select('.text_02 > a')[(4*n)+1].text,
            soup.select('.text_02 > a')[(4*n)+2].text,
            soup.select('.text_02 > a')[(4*n)+3].text,
        ]
        df_list.append(df)
    
    print(df_list)
df_all = pd.concat(df_list, ignore_index = True)


#To_excel with today string file name.
today_string = datetime.datetime.now().strftime('%y.%m.%d_%Hh%Mm%Ss')
df_all.to_excel('Sisuljob_Raw_Data_(' + today_string + ').xlsx')
原始代码
  • 原始代码的问题是dataframe
    df
    是在循环之外创建的对象
  • 每次循环迭代时,一个指向数据帧对象
    df
    的指针被添加到
    df\u列表中
  • 对于每个循环,
    df
    都会发生变化,因此
    df\u列表中的所有
    df
    都是相同的,并且随着每个循环而变化
  • 这个问题可以通过将
    df\u list.append(df)
    更改为
    df\u list.append(df.copy())
    来解决
使用
  • 幸运的是,整个html页面都标有
    ,可以轻松地用
    • 该方法将每个表读入数据帧列表
    • 对于这些页面,您需要的表是和索引14
  • 索引14中的每个表都将被添加到一个列表中,然后所有数据帧都将与
将熊猫作为pd导入
#阅读网页;1-29,并将索引14处的表格附加到df_列表中
df_list=[pd.read_html(f'http://www.sisuljob.com/employ/employ_01.htm?tb=1&sca=&stx1=&stx2=&stx3=&sfl1=&sfl2=&sfl3=&page={page}')[14]用于范围(1,31)内的页面]
#连接数据帧列表
df=pd.concat(df_列表)
#dropna列和行
df=df.dropna(axis=0,how='all')。dropna(axis=1,how='all')。重置索引(drop=True)
#添加列标题
df.columns=[‘公司’、‘职位’、‘工资’、‘地点’、‘开始日期’、‘结束日期’]
df
打印(df.info())
[out]:
范围索引:580个条目,0到579
数据列(共6列):
#列非空计数数据类型
---  ------      --------------  ----- 
0公司580非空对象
1标题580非空对象
2.580非空对象
3位置579非空对象
4开始日期580非空对象
5结束日期580非空对象
数据类型:对象(6)
内存使用率:27.3+KB
df.head(20)
df.tail(20)

我在回答中添加了一个更新,用原始代码解释了这个问题。所以你知道,这实际上是一个相当棘手的问题。
|    | Company                 | Title                                                            | Salary    | Location   | Start_date   | End_date   |
|---:|:------------------------|:-----------------------------------------------------------------|:----------|:-----------|:-------------|:-----------|
|  0 | 문정현대지식산업센터    | 시설기사                                                         | 2800~2900 | 서울       | 2020-09-11   | 채용시까지 |
|  1 | 인성에스비엠            | 시설(영선)기사 구인                                              | 2600~2700 | 서울       | 2020-09-11   | 채용시까지 |
|  2 | IBS인더스트리           | 판교 신세계조선호텔 전기/소방 주임                               | 2900~3000 | 경기       | 2020-09-11   | 2020-09-25 |
|  3 | (주)맥서브              | 연합뉴스 빌딩                                                    | 2500~2500 | 서울       | 2020-09-11   | 채용시까지 |
|  4 | 힐스테이트암사APT       | 기전주임(격일제)                                                 | 3300~3300 | 서울       | 2020-09-11   | 2020-09-20 |
|  5 | 양재하이브랜드          | 전기주임(무제한선임)-직영                                        | 3700~3900 | 서울       | 2020-09-11   | 채용시까지 |
|  6 | 삼구 아이엔씨           | 강남 (대치동,논현동) 글래드 호텔 일근 기사 구함2 개지점          | 2500~2700 | 서울       | 2020-09-11   | 채용시까지 |
|  7 | 스마일게이트 홀딩스     | [스마일게이트 SPMC] 시설지원팀 전기/소방 안전관리자 모집         | 3200~3700 | 경기       | 2020-09-11   | 채용시까지 |
|  8 | 분당트라팰리스          | 시설전기 격일제                                                  | 3200~3300 | 경기       | 2020-09-11   | 채용시까지 |
|  9 | 주식회사 케이에스메이트 | 호텔 기계 주임 주간                                              | 2800~2800 | 서울       | 2020-09-11   | 채용시까지 |
| 10 | (주)조은시스템          | 시설                                                             | 3300~3400 | 서울       | 2020-09-11   | 채용시까지 |
| 11 | (주)이노서브비엠        | 스카이파크 대전1호점 전기팀장,시설기사 구인                      | 2800~3200 | 서울       | 2020-09-11   | 채용시까지 |
| 12 | (주)한결티엠에스        | 경기도 광주 관리소장 모집                                        | 3400~3600 | 경기       | 2020-09-11   | 2020-09-30 |
| 13 | 스마일게이트 홀딩스     | [스마일게이트 SPMC] 시설지원팀 전기/소방 관리 담당 (주임~대리급) | 2700~3000 | 경기       | 2020-09-11   | 채용시까지 |
| 14 | 스마일게이트 홀딩스     | [스마일게이트 SPMC] 시설지원팀 기계/설비 관리 담당 (주임/대리급) | 2700~3000 | 경기       | 2020-09-11   | 채용시까지 |
| 15 | (주)호리마이어          | 기전기사                                                         | 2400~2400 | 서울       | 2020-09-11   | 채용시까지 |
| 16 | 미소들의료재단          | 병원내 직영 시설관리 4교대 가능자 모집                           | 2700~2900 | 서울       | 2020-09-11   | 채용시까지 |
| 17 | 백상기업(주)            | 연2640 여의도 KB통합사옥 시설기사(전기파트)                      | 2600~2700 | 서울       | 2020-09-11   | 2020-09-14 |
| 18 | 백상기업(주)            | 월220 여의도 KB국민은행신사옥 건축주임 주5                       | 2600~2700 | 서울       | 2020-09-11   | 2020-09-11 |
| 19 | 백상기업(주)            | [월250/식사제공] 인하대생활관 기전기사 모집(전기산업기사)        | 3000~3000 | 인천       | 2020-09-11   | 2020-09-14 |
|     | Company                   | Title                                                                           | Salary    | Location   | Start_date   | End_date   |
|----:|:--------------------------|:--------------------------------------------------------------------------------|:----------|:-----------|:-------------|:-----------|
| 560 | (주)에프엠텍              | 시설관리                                                                        | 3200~3300 | 서울       | 2020-08-13   | 2020-08-31 |
| 561 | 주식회사 폴에이산업       | 오피스 건물 시설 주임                                                           | 2500~2500 | 서울       | 2020-08-13   | 채용시까지 |
| 562 | 토탈S.E.M시스템           | 롯데마트 서초점 시설관리                                                        | 2500~2600 | 서울       | 2020-08-13   | 채용시까지 |
| 563 | 리마크빌 영등포           | 시설주임 보일러,가스 선임필수                                                   | 3300~3400 | 서울       | 2020-08-13   | 채용시까지 |
| 564 | 위례오벨리스크            | 기전주임                                                                        | 3300~3300 | 경기       | 2020-08-13   | 채용시까지 |
| 565 | (주)고암                  | 방재기사                                                                        | 2500~2700 | 서울       | 2020-08-13   | 2020-08-25 |
| 566 | 압구정빌딩                | 기계실기사                                                                      | 3100~3200 | 서울       | 2020-08-13   | 채용시까지 |
| 567 | 서울농수산시장관리(주)    | (단기기간제근로자:일용직/시급:10,523) 시설파트단순노무종사원, 청소, 취사보조 등 | 1400~3000 | 서울       | 2020-08-13   | 채용시까지 |
| 568 | (주)아이비에스 인더스트리 | 신라스테이 광화문 시설기사모집                                                  | 2500~2600 | 서울       | 2020-08-13   | 채용시까지 |
| 569 | 지에스아이주식회사        | 고압가스 기능사 / 시설관리                                                      | 3000~3400 | 서울       | 2020-08-13   | 채용시까지 |
| 570 | 선재에이치알              | 전기주임 모집/일근                                                              | 2900~3000 | 서울       | 2020-08-12   | 채용시까지 |
| 571 | 한국주택시설관리(주)      | 상가관리소장                                                                    | 4000~4500 | 서울       | 2020-08-12   | 2020-08-14 |
| 572 | (주)삼구아이앤씨          | [삼구아이앤씨] 가톨릭대학교 시설기사 모집                                       | 2700~2800 | 경기       | 2020-08-12   | 2020-08-31 |
| 573 | 주식회사 큐원             | 기계기사 모집                                                                   | 2700~2700 | 서울       | 2020-08-12   | 채용시까지 |
| 574 | 백상기업(주)              | 월220이상 여의도 KB국민은행 방송기사(주임-대리) 모집 주5                        | 2600~2800 | 서울       | 2020-08-12   | 채용시까지 |
| 575 | ksnc                      | 기계기사 모집                                                                   | 2800~2900 | 서울       | 2020-08-12   | 채용시까지 |
| 576 | 아이비에스인더스트리      | 방재주임                                                                        | 2800~2900 | 서울       | 2020-08-12   | 채용시까지 |
| 577 | 성민종합사회복지관        | 시설안전관리인                                                                  | 2800~3000 | 서울       | 2020-08-12   | 2020-08-18 |
| 578 | (주)케이엠산업            | 전기기사(선임) 구인                                                             | 3600~3600 | 강원       | 2020-08-12   | 채용시까지 |
| 579 | 코오롱LSI(주)             | 시설(전기,소방/4교대)기사 채용모집 - 서울(여의도) FKI타워                       | 2700~2900 | 서울       | 2020-08-12   | 채용마감   |