繁体   English   中英

如何从 url 列表中抓取数据

[英]How to scrape data from urls list

我正在尝试制作一个从网站列表中抓取信息的代码。 我的目标是获取所有数据并将其保存在 JSON 文件中。 结尾应该是这样的:

[
    {
        "title": "Python developer",
        "place": "Slovensko",
        "salary": "od 1000 €",
        "contract_type": "dohoda",
        "contact_email": "hr@hyperia.sk"
},
...
]

我制作了一个从种子网站获取所有链接的代码,它工作正常,但我被困在数据抓取中。 这是我写的代码:

from bs4 import BeautifulSoup
import requests
import re


zaciatok = "https://www.hyperia.sk/kariera"
def getHTMLdocument(zaciatok):
    response = requests.get(zaciatok)
    return response.text

vsetky_linky= []
html_document = getHTMLdocument(zaciatok)
soup = BeautifulSoup(html_document, "html.parser")

for link in soup.find_all("a", attrs={'href',"arrow-link", }):
    vsetky_linky.append(link.get("href"))


vsetky_linky.pop()

urls = []
for x in vsetky_linky:
    urls.append("https://www.hyperia.sk"+x)
    
 

daaata = []
for url in urls:
    print(url)
    req = requests.get(url)
    req.encoding = "utf-8-sig"
    
    polievka = BeautifulSoup(req.text, "html.parser")

    
    nadpis = polievka.find("div", attrs={'class': 'hero-text col-lg-12'})
    br = polievka.find("br")
    for p in polievka.select("p:has(br)"):
        daaata.append(
            [
                nadpis.get_text(strip=True) ,
                br.get_text(strip=True) , 
                ]
            )
print(daaata)
                

最后我打印了报废的数据,我看到它还从 header 下提取了一个文本(我只需要 header “Python 开发人员”而不是它下面的文本)。 你能帮助我吗?

尝试 select 你的元素更具体,在你的情况下<h1>

"title": polievka.h1.text,

示例如何在您的for-loop中使用,随意调整它以适应您的最终需求,我的斯洛伐克语不是那么好,所以我不知道什么重要;)

...
daaata = []
for url in urls:
    print(url)
    req = requests.get(url)
    req.encoding = "utf-8-sig"
    
    polievka = BeautifulSoup(req.text, "html.parser")
    
    daaata.append({
        "title": polievka.h1.text,
        "place": polievka.select_one('img[alt="place"] + p br').next,
        "salary": polievka.select_one('img[alt="wage"] + p br').next,
        "contract_type": polievka.select_one('img[alt="work"] + p br').next,
        "contact_email": polievka.select_one('a[href^="mailto"]').get('href').split(':')[-1]
    })

daaata

Output

[{'title': 'Python developer - študent', 'place': 'Slovensko', 'salary': '6 € / hodina', 'contract_type': 'dohoda o brig. práci študenta', 'contact_email': 'hr@hyperia.sk'}, {'title': 'Senior PPC špecialista', 'place': 'Slovensko', 'salary': 'od 1 800,- €', 'contract_type': 'TPP, živnosť', 'contact_email': 'hr@hyperia.sk'}, {'title': 'Product owner', 'place': 'Slovensko', 'salary': 'od 2 000 ,- €', 'contract_type': 'TPP, živnosť', 'contact_email': 'hr@hyperia.sk'}, {'title': 'Lead Frontend developer', 'place': 'Slovensko', 'salary': '2 000 - 4 000 ,- €', 'contract_type': 'TPP, živnosť', 'contact_email': 'hr@hyperia.sk'}, {'title': 'Frontend developer (medior/senior)', 'place': 'Slovensko', 'salary': '2 000 - 4 000 ,- €', 'contract_type': 'TPP, živnosť', 'contact_email': 'hr@hyperia.sk'}, {'title': 'Kimbino senior PHP developer', 'place': 'Slovensko', 'salary': 'od 2 000 ,- €', 'contract_type': 'TPP, živnosť', 'contact_email': 'hr@hyperia.sk'}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM