使用select_one提取标签

问题描述

我正在尝试从此页面使用Python中的CSS选择器提取特定标签内的内容https://scenarieconomici.it/page/898/

特别是,我对标题,日期,作者,类别和摘要很感兴趣。 我尝试如下:

    print(tag.select_one(".entry-title").text)
    print(tag.select_one("span.Meta-time").text)
    print(tag.select_one("span.Meta-author").text)
    print(tag.select_one("span.category-item").text)
    print(tag.find_next(class_="entry-content").text.strip())  

能否请您告诉我它们是否正确?如果需要,我可以为您提供我正在使用的全部代码

非常感谢


在下面Wasif的回答之后,我更改了代码,但不幸的是,标签似乎仍然存在问题:

import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor
import pandas as pd

def main(req,num):
    r = req.get("https://scenarieconomici.it/page/{}/".format(num))
    # r = req.get("https://www.imolaoggi.it/category/polit/page/{}/".format(num))
    soup = BeautifulSoup(r.content,'html.parser')
    #goal = [(x.time.text,x.h3.a.text,x.select_one("span.cat-links").get_text(strip=True),x.p.get_text(strip=True))
     #       for x in soup.select("div.site-content")]
    for tag in soup.select('div',class_='entry-blog'):
        print(tag.find('span',class_='entry-title'))
        print(tag.find('span',class_='Meta-time'))
        print(tag.find('span',class_='Meta-author'))
        print(tag.find('span',class_='category-item'))
        print(tag.find_next(class_='entry-content'))
    return tag.find('span',class_='entry-title'),tag.find('span',class_='Meta-time'),class_='Meta-author'),class_='category-item'),tag.find_next(class_='entry-content')

with ThreadPoolExecutor(max_workers=30) as executor:
    with requests.Session() as req:
        # fs = [executor.submit(main,req,num) for num in range(1,2937)]
        fs = [executor.submit(main,2)]
        allin = []
        for f in fs:
            allin.append(f.result())
        df = pd.DataFrame.from_records(
            allin,columns=["Title","Time","Author","Category","Content"])
       

因为我只得到None值。

解决方法

为什么不使用.find()

print(tag.find('span',class_='your class'))
,
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor
from itertools import repeat
import re
import pandas as pd


def main(req,num):
    r = req.get("https://scenarieconomici.it/page/{}/".format(num))
    soup = BeautifulSoup(r.content,'html.parser')
    return [(
            x.select_one("h2.entry-title").text,x.select_one("span.meta-time").text,x.select_one("span.meta-author").a.text,x.select_one("span.category-item").a.text,x.select_one("div.entry-content").p.text
            )
            for x in soup.findAll("article",id=re.compile(r"post-\d+"))]


with ThreadPoolExecutor(max_workers=50) as executor:
    with requests.Session() as req:
        fs = executor.map(main,repeat(req),range(1,899))
        final = []
        [final.extend(f) for f in fs]
        df = pd.DataFrame.from_records(
            final,columns=["Title","Time","Author","Category","Content"])
        print(df)

输出

                                                   Title              Time  ...         Category                                            Content
0      LA SOLUZIONE DEL TEAM BIDEN PER IL COVID: MORI...  11 Novembre 2020  ...       attualita'  Ezekiel Emanuel Biden ha gia fatto partire i s...
1      10 Procuratori Statali con Trump,contro la Pe...  11 Novembre 2020  ...       attualita'  I procuratori generali del Missouri,Alabama,...
2      TAGLIARE L’IVA: rilanciare l’economia ed incre...  11 Novembre 2020  ...       attualita'  Ieri Salvini e Bagnai hanno presentato il pian...
3      Il Parlamento Europeo? Incrementa i vincoli su...  10 Novembre 2020  ...       attualita'  Lunedì in commissione ECON è  stato  discusso ...
4      Dove siete finiti,cari rigoristi dell’austeri...  10 Novembre 2020  ...  analisi e studi  Dove siete finiti,detrattori della spesa pubb...
...                                                  ...               ...  ...              ...                                                ...
17941     Analisi della CRISI attuale: la GUERRA incombe  12 Novembre 2011  ...    Uncategorized  10 domande e 10 rispostePerche’ gli spread tra...
17942  SEMPLICE CRISI FINANZIARIA O TERZA GUERRA MOND...    12 Luglio 2011  ...    Uncategorized  Intervista immaginaria a Frank (che spiega per...
17943  SLIDING DOORS: “SIAMO L’UNICO PAESE DEL MONDO ...    12 Giugno 2011  ...    Uncategorized  Spesso siamo portati a criticare,a lamentarci...
17944             L’origine del DEBITO PUBBLICO Italiano    12 Giugno 2011  ...    Uncategorized  Spesso ci si chiede la vera origine del nostro...
17945                              La caduta dei Giganti    12 Giugno 2011  ...    Uncategorized  Vorrei soffermarmi un’istante sui 3 paesi card...

[17946 rows x 5 columns]