网络抓取:无法抓取给定div,类的文本和href,也无法跳过span标签

时间:2020-04-22 06:15:55

标签: python-3.x web-scraping beautifulsoup

试图获取热门新闻的文本和href,但无法抓取。

网站:News site

我的代码:

import requests
from bs4 import BeautifulSoup
import psycopg2
import time


def checkResponse(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.content
    else:
        return None


def getTitleURL():
    url = 'http://sandesh.com/'
    response = checkResponse(url)

    if response is not None:
        html = BeautifulSoup(response, 'html.parser')

    for values in html.find_all('div', class_='d-top-news-latest'):
        headline = values.find(class_='d-s-NSG-regular').text
        url = values.find(class_='d-s-NSG-regular').['href']
        print(headline + "->" + url)


if __name__ == '__main__':
    print('Getting the list of names....')
    names = getTitleURL()
    print('... done.\n')

输出:

Getting the list of names....
Corona live
મેડિકલ સ્ટાફ પર હુમલા અંગે અમિત શાહે ડોક્ટર્સ સાથે કરી ચર્ચા, સુરક્ષાની ખાતરી આપતા કરી અપીલ





Ahmedabad
ગુજરાતમાં કૂદકેને ભૂસકે વધ્યો કોરોના વાયરસનો કહેર, આજે નવા 94 કેસ નોંધાયા, જાણો કયા- કેટલા કેસ નોંધાયા





Corona live
જીવન અને મોત વચ્ચે સંઘર્ષ કરી રહ્યો છે દુનિયાનો સૌથી મોટો તાનાશાહ કિમ જોંગ! ટ્રમ્પે કહી આ વાત





Ahmedabad
અમદાવાદમાં નર્સિંગ સ્ટાફનો ગુસ્સો ફૂટ્યો, ‘અમારું કોઈ સાંભળતું નથી, અમારો કોરોના ટેસ્ટ જલદી કરાવો’





Business
ભારતીય ટેલિકોમ જગતમાં સૌથી મોટી ડીલ, ફેસબુક બની જિયોની સૌથી મોટી શેરહોલ્ડર


->http://sandesh.com/amit-shah-talk-with-ima-and-doctors-through-video-conference-on-attack/
... done.

我想跳过标记内的文本,而且我只能获得1 href。标题也是列表。 如何获取每个标题和网址。

我正在尝试将零件刮成红色:

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,在for values in html.find_all('div', class_='d-top-news-latest'),您不需要使用for,因为在DOM中,只有一个类d-top-news=latest

第二,要获取标题,您可以使用select('span'),因为您的标题已放入span标记中。

第三,您知道标题是列表,因此您需要使用for来获取每个标题和URL。

values = html.find('div', class_='d-top-news-latest')
for i in values.find_all('a', href = True):
    print(i.select('span'))
    print(i['href'])

输出

Getting the list of names....
[<span>
Corona live
</span>]
http://sandesh.com/maharashtra-home-minister-anil-deshmukh-issue-convicts-list-of- 
palghar-case/
[<span>
Corona live
</span>]
http://sandesh.com/two-doctors-turn-black-after-treatment-of-coronavirus-in-china/
[<span>
Corona live
</span>]
http://sandesh.com/bihar-asi-gobind-singh-suspended-for-holding-home-guard-jawans- 
after-stopping-officers-car-asi/
[<span>
Ahmedabad
</span>]
http://sandesh.com/jayanti-ravi-surprise-statement-sparks-outcry-big-decision-taken- 
despite-more-patients-in-gujarat/
[<span>
Corona live
</span>]
http://sandesh.com/amit-shah-talk-with-ima-and-doctors-through-video-conference-on- 
attack/
... done.

答案 1 :(得分:0)

删除“ span”部分:

values = html.find('div', class_='d-top-news-latest')
for i in values.find_all('a', href=True):
    i.span.decompose()
    print(i.text)
    print(i['href'])

输出:

Getting the list of names....

ગુજરાતમાં કોરોનાનો કહેરઃ રાજ્યમાં આજે કોરોનાના 135 નવા કેસ, વધુ 8 લોકોનાં મોત

http://sandesh.com/gujarat-corona-update-206-new-cases-and-18-deaths/

ચીનના વૈજ્ઞાનિકોએ જ ખોલી જીનપિંગની પોલ, કોરોના વાયરસને લઈને કર્યો સનસની ખુલાસો

http://sandesh.com/chinese-scientists-claim-over-corona-virus/

શું લોકડાઉન ફરી વધારાશે? PM મોદી 27મીએ ફરી એકવાર તમામ CM સાથે કરશે ચર્ચા

http://sandesh.com/pm-modi-to-hold-video-conference-with-cms-on-april-27-lockdown- 
extension/

કોરોના વાયરસને લઈ મોટી ભવિષ્યવાણી, દુનિયાના 30 દેશો પર ઉભુ થશે ભયંકર સંકટ

http://sandesh.com/after-corona-attack-now-hunger-will-kill-many-people-in-the-world/

દેશમાં 24 કલાકમાં 1,486 કોરોનાનાં નવા કેસ, પરંતુ મળ્યા સૌથી મોટા રાહતનાં સમાચાર

http://sandesh.com/recovery-rate-increased-in-corona-patients-says-health-ministry/
... done.