Treoir céim ar chéim chun Google News a scríobadh le Python

Tuairimí: 0

Agus na ceannlínte nuachta is déanaí á mbailiú, ag déanamh monatóireachta ar threochtaí nuachta, agus ag déanamh anailíse meon ar chúrsaí reatha, is uirlis luachmhar é scríobadh Google News. San alt seo, treoróimid tú tríd an bpróiseas chun Google News a scríobadh trí Python. Fostóimid leabharlann iarratais chun ábhar leathanaigh a fháil; LXML chun doiciméid HTML a pharsáil agus sonraí a bhaint amach. Faoi dheireadh an teagaisc seo, foghlaimeoidh tú conas ceannlínte nuachta agus a naisc faoi seach a bhaint as Google News go formáid Struchtúrtha JSON.

Céim 1: An timpeallacht a chur ar bun

Sula dtosaímid, déan cinnte go bhfuil python suiteáilte agat ar do chóras. Is féidir leat na leabharlanna riachtanacha a shuiteáil trí na horduithe seo a leanas a reáchtáil:

pip install requests 
pip install lxml

Tabharfaidh na leabharlanna seo deis dúinn iarratais HTTP a dhéanamh agus ábhar HTML an leathanaigh ghréasáin a pharsáil.

Céim 2: An sprioc URL agus an struchtúr XPath a thuiscint

Beimid ag scríobadh leathanach Google News ag an URL seo a leanas:

URL = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"

Tá il -earraí nuachta sa leathanach seo, gach ceann acu le príomh -cheannlíne agus earraí gaolmhara. Seo a leanas an struchtúr XPath do na míreanna seo:

  • Príomhchoimeádán nuachta: //c-wiz[@jsrenderer="ARwRbe"]
  • Príomh -teideal nuachta: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/article/a/text()
  • Príomh -nasc nuachta: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/article/a/@href
  • Coimeádán nuachta gaolmhar: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/div/article/
  • Teideal nuachta gaolmhar: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/div/article/a/text()
  • Nasc nuachta gaolmhar: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/div/article/a/@href

Tá struchtúr HTML Google News fós comhsheasmhach ar fud leathanaigh éagsúla, ag cinntiú go bhfuil na heilimintí sonraithe XPath infheidhme go huilíoch.

Céim 3: Ábhar News Google a fháil

Tosóimid trí ábhar an leathanaigh Google News a fháil ag baint úsáide as an Leabharlann Iarrataí. Seo an cód chun ábhar an leathanaigh a fháil:

import requests

url = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
response = requests.get(url)

if response.status_code == 200:
    page_content = response.content
else:
    print(f"Failed to retrieve the page. Status code: {response.status_code}")

Seolann an cód seo iarratas GET chuig URL Google News agus stórálann sé ábhar HTML an leathanaigh san athróg Page_Content.

Céim 4: An t -ábhar HTML a pharsáil le LXML

Leis an ábhar HTML ar láimh, is féidir linn LXML a úsáid chun an leathanach a pharsáil agus na ceannlínte agus na naisc nuachta a bhaint.

from lxml import html

# Parse an t -ábhar HTML
parser = html.fromstring(page_content)

Céim 5: Sonraí Nuachta a Bhaint Amach

Eagraíonn Google News a chuid earraí i gcoimeádáin shonracha. Déanfaimid na coimeádáin seo a bhaint den chéad uair ag baint úsáide as a gcuid XPath agus ansin déanfaimid iad a athrá chun na ceannlínte agus na naisc nuachta aonair a bhaint amach.

Príomh -earraí nuachta a bhaint amach

Tá na príomh -ailt nuachta suite faoin xpath seo a leanas:

main_news_elements = parser.xpath('//c-wiz[@jsrenderer="ARwRbe"]')

Is féidir linn lúb a dhéanamh anois tríd an gcéad 10 eilimint bhailí agus na teidil agus na naisc a bhaint as:

news_data = []

for element in main_news_elements[:10]:
    title = element.xpath('.//c-wiz/div/article/a/text()')[0]
    link = "https://news.google.com" + element.xpath('.//c-wiz/div/article/a/@href')[0][1:]

    
    # A chinntiú go bhfuil sonraí ann sula gceanglaíonn tú ar an liosta
    if title and link:
        news_data.append({
        "main_title": title,
        "main_link": link,
    })

Airteagail ghaolmhara a bhaint laistigh de gach príomhghné nua

Tá fo -ailt sa phríomhghné nuachta ina bhfuil nuacht ghaolmhar i láthair. Is féidir linn iad seo a bhaint as cur chuige comhchosúil:

related_articles = []
related_news_elements = element.xpath('.//c-wiz/div/div/article')

for related_element in related_news_elements:
    related_title = related_element.xpath('.//a/text()')[0]
    related_link = "https://news.google.com" + related_element.xpath('.//a/@href')[0][1:]
    related_articles.append({"title": related_title, "link": related_link})

news_data.append({
    "main_title": title,
    "main_link": link,
    "related_articles": related_articles
})

Céim 6: Na sonraí a shábháil mar json

Tar éis na sonraí a bhaint amach, is féidir linn é a shábháil i gcomhad JSON lena úsáid níos déanaí.

import json

with open('google_news_data.json', 'w') as f:
    json.dump(news_data, f, indent=4)

Cruthóidh an cód seo comhad darb ainm Google_News_Data.json ina bhfuil na ceannlínte nuachta go léir agus a naisc chomhfhreagracha.

Ag baint úsáide as Proxies

Agus suimeanna móra sonraí á scríobadh, go háirithe ó shuíomhanna ard-tráchta cosúil le Google News, d'fhéadfá teacht ar shaincheisteanna cosúil le blocáil IP nó teorannú ráta. Chun é seo a sheachaint, is féidir leat seachvótálaithe a úsáid. Tugann seachvótálaithe deis duit d'iarratais a chur ar bhealach trí sheoltaí éagsúla IP, rud a chiallaíonn go bhfuil sé níos deacra don láithreán gréasáin do chuid gníomhaíochtaí scríobtha a bhrath agus a bhlocáil.

Don rang teagaisc seo, is féidir leat seachfhreastalaí a úsáid trí na hiarrataí a mhodhnú.

proxies = {
    "http": "http://your_proxy_ip:port",
    "https": "https://your_proxy_ip:port",
}

response = requests.get(url, proxies=proxies)

Má tá tú ag obair le soláthraí seirbhíse a bhainistíonn uainíocht seachfhreastalaí, ní gá duit ach an tseirbhís a chumrú i do chuid iarrataí. Déileálfaidh an soláthraí leis an uainíocht agus an bhainistíocht linn snámha IP ar a deireadh.

Saincheaptha ceanntásca iarratais

Uaireanta, is féidir le láithreáin ghréasáin iarratais nach bhfuil na ceanntásca cuí acu a bhlocáil, mar shampla teaghrán gníomhaire úsáideora a aithníonn an t-iarratas mar bhrabhsálaí. Is féidir leat do cheanntásca a shaincheapadh chun braite a sheachaint:

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)

Comhlánaigh sampla an chóid

Seo an cód iomlán, ag comhcheangal na gcéimeanna go léir:

import requests
import urllib3
from lxml import html
import json

urllib3.disable_warnings()

# URL agus ceanntásca
url = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
headers = {
   'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
   'accept-language': 'en-IN,en;q=0.9',
   'cache-control': 'no-cache',
   'dnt': '1',
   'pragma': 'no-cache',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
   'sec-ch-ua-arch': '"x86"',
   'sec-ch-ua-bitness': '"64"',
   'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-model': '""',
   'sec-ch-ua-platform': '"Linux"',
   'sec-ch-ua-platform-version': '"6.5.0"',
   'sec-ch-ua-wow64': '?0',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'none',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
   'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}

# Cumraíocht Proxies (cuir do chuid sonraí seachfhreastalaí in ionad)
proxy = 'ip:port'
proxies = {
   "http": f"http://{proxy}",
   "https": f"https://{proxy}",
}

# Faigh ábhar an leathanaigh leis na ceanntásca sonraithe agus na seachvótálaithe
response = requests.get(url, headers=headers, proxies=proxies, verify=False)

# Seiceáil an raibh an t -iarratas rathúil
if response.status_code == 200:
   page_content = response.content
else:
   print(f"Failed to retrieve the page. Status code: {response.status_code}")
   exit()

# Parse an t -ábhar HTML ag úsáid LXML
parser = html.fromstring(page_content)

# An príomh -scéal agus na hearraí gaolmhara a bhaint amach
main_news_elements = parser.xpath('//*[@id="i10-panel"]/c-wiz/c-wiz')

# Tús a chur le liosta chun na sonraí nuachta eastósctha a stóráil
news_data = []

# Lúb trí gach príomhghné nuachta
for element in main_news_elements[:10]:
   # Sliocht an príomhtheideal nuachta agus an nasc
   title = element.xpath('.//c-wiz/div/article/a/text()')
   link = element.xpath('.//c-wiz/div/article/a/@href')

   # Tús a chur le liosta chun earraí gaolmhara a stóráil don phríomh -nuacht seo
   related_articles = []

   # Eilimintí nuachta a bhaineann le sliocht laistigh den bhloc céanna
   related_news_elements = element.xpath('.//c-wiz/div/div/article')

   # Lúb trí gach gné nuachta gaolmhar agus bain an teideal agus an nasc amach
   for related_element in related_news_elements:
       related_title = related_element.xpath('.//a/text()')[0]
       related_link = "https://news.google.com" + related_element.xpath('.//a/@href')[0][1:]
       related_articles.append({"title": related_title, "link": related_link})

   # Cuir an príomh -scéal agus a chuid earraí gaolmhara leis an liosta news_data
   if title is not None:
       news_data.append({
           "main_title": title,
           "main_link": f'https://news.google.com{link}',
           "related_articles": related_articles
       })
   else:
       continue


# Sábháil na sonraí eastósctha le comhad JSON
with open("google_news_data.json", "w") as json_file:
   json.dump(news_data, json_file, indent=4)

print('Data extraction complete. Saved to google_news_data.json')

Nuair a scríobann sé Google News ag baint úsáide as Python, mar aon leis na hiarratais agus na leabharlanna LXML, éascaíonn anailís mhionsonraithe ar threochtaí nuachta. Tá sé ríthábhachtach seachvótálaithe a chur i bhfeidhm agus ceanntásca iarratais a chumrú chun bloic a sheachaint agus cobhsaíocht scraper a choinneáil. I measc na seachvótálaithe idéalach chun na críche seo tá IPv4 agus IPv6 Datacenter Proxies agus seachvótálaithe ISP, a thairgeann luas ard agus ping íseal. Ina theannta sin, tá seachfhreastalaithe cónaithe dinimiciúla an -éifeachtach mar gheall ar a bhfachtóir iontaobhais níos fearr.

Tuairimí:

0 tuairimí