ползать на питоне Beautifulsoup, как сканировать несколько страниц? - PullRequest
0 голосов
/ 05 декабря 2018

Пожалуйста, помогите.Я хочу получить все названия компаний на каждой странице, и они имеют 12 страниц.

http://www.saramin.co.kr/zf_user/jobs/company-labs/list/page/1 http://www.saramin.co.kr/zf_user/jobs/company-labs/list/page/2 - этот сайт только меняет номер.

Итак, вот мой код.Могу ли я получить только название (название компании) из 12 страниц?Заранее спасибо.

from bs4 import BeautifulSoup
import requests

maximum = 0
page = 1

URL = 'http://www.saramin.co.kr/zf_user/jobs/company-labs/list/page/1'
response = requests.get(URL)
source = response.text
soup = BeautifulSoup(source, 'html.parser')

whole_source = ""
for page_number in range(1, maximum+1):
URL = 'http://www.saramin.co.kr/zf_user/jobs/company-labs/list/page/' + str(page_number)
response = requests.get(URL)

whole_source = whole_source + response.text
soup = BeautifulSoup(whole_source, 'html.parser')
find_company = soup.select("#content > div.wrap_analysis_data > div.public_con_box.public_list_wrap > ul > li:nth-child(13) > div > strong")

for company in find_company:
print(company.text)

--------- Вывод одной страницы

--------страничка источника :)

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я понял это в конце концов.Спасибо за ваш ответ, хотя!

image: код, записанный в блокноте jupyter

Вот мой окончательный код.

from urllib.request import urlopen 
from bs4 import BeautifulSoup

company_list=[]
for n in range(12):
    url = 'http://www.saramin.co.kr/zf_user/jobs/company-labs/list/page/{}'.format(n+1)
    webpage = urlopen(url)
    source = BeautifulSoup(webpage,'html.parser',from_encoding='utf-8')
    companys = source.findAll('strong',{'class':'company'})

    for company in companys:
    company_list.append(company.get_text().strip().replace('\n','').replace('\t','').replace('\r',''))

file = open('company_name1.txt','w',encoding='utf-8')

for company in company_list:
file.write(company+'\n')

file.close()
0 голосов
/ 05 декабря 2018

Итак, вы хотите удалить все headers и получить только string названия компании?В принципе, вы можете использовать soup.findAll, чтобы найти список компаний в следующем формате:

<strong class="company"><span>중소기업진흥공단</span></strong>

Затем вы используете функцию .find для извлечения информации из <span> tag:

<span>중소기업진흥공단</span>

После этого вы используете функцию .contents для получения строки из тега <span>:

'중소기업진흥공단'

Итак, вы пишете цикл, который делает то же самое для каждой страницы, и создаете список с именем company_list, чтобы сохранить результаты каждой страницы и добавить их вместе.

Воткод:

from bs4 import BeautifulSoup
import requests

maximum = 12

company_list = [] # List for result storing
for page_number in range(1, maximum+1):
    URL = 'http://www.saramin.co.kr/zf_user/jobs/company-labs/list/page/{}'.format(page_number) 
    response = requests.get(URL)
    print(page_number)
    whole_source = response.text
    soup = BeautifulSoup(whole_source, 'html.parser')
    for entry in soup.findAll('strong', attrs={'class': 'company'}): # Finding all company names in the page
        company_list.append(entry.find('span').contents[0]) # Extracting name from the result

* company_list даст вам все названия компаний, которые вы хотите

...