Python 抓取谷歌头条突然停止工作

Python 抓取谷歌头条突然停止工作,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我已经为谷歌新闻页面的网页抓取编写了一个代码。直到今天它停止运转,它一直运转良好。 它不会给我任何错误,但它不会刮伤任何东西 对于这段代码,我在youtube上观看了2018年的教程,我使用了相同的url和“div” 当我在浏览器上转到“检查”时,它仍然有class=st和class=slp 我的意思是,这意味着它在一年前开始工作,直到昨天才开始工作,但今天就停止工作了 你知道有什么问题吗? 这是昨天起作用的代码: from textblob import TextBlob from bs4 i

我已经为谷歌新闻页面的网页抓取编写了一个代码。直到今天它停止运转,它一直运转良好。 它不会给我任何错误,但它不会刮伤任何东西

对于这段代码,我在youtube上观看了2018年的教程,我使用了相同的url和“div”

当我在浏览器上转到“检查”时,它仍然有class=st和class=slp

我的意思是,这意味着它在一年前开始工作,直到昨天才开始工作,但今天就停止工作了

你知道有什么问题吗? 这是昨天起作用的代码:

from textblob import TextBlob
from bs4 import BeautifulSoup
import requests
from datetime import date, timedelta, datetime

term = 'coca cola'

url = 'https://www.google.com/search?q={0}&source=lnms&tbm=nws'.format(term)

response = requests.get(url)
print(response)

soup = BeautifulSoup(response.text, 'html.parser')

snippet_text = soup.find_all('div', class_='st')
print(len(snippet_text))

news_date = soup.find_all('div', class_='slp')
print(len(news_date))

for paragraph_text, post_date in zip(snippet_text, news_date):

        paragraph_text = TextBlob(paragraph_text.get_text())
        print(paragraph_text)

        todays_date = date.today()
        time_ago = TextBlob(post_date.get_text()).split('- ')[1]
        print(time_ago)
google是否更改HTML代码或url?

请在删除google时添加用户代理

from bs4 import BeautifulSoup
import requests
from datetime import date, timedelta, datetime

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

term = 'coca cola'

url = 'https://www.google.com/search?q={0}&source=lnms&tbm=nws'.format(term)

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

soup = BeautifulSoup(response.text, 'html.parser')

snippet_text = soup.find_all('div', class_='st')
print(len(snippet_text))

news_date = soup.find_all('div', class_='slp')
print(len(news_date)) 
如果得到SSL错误最大到达值,则添加verify=False

response = requests.get(url,headers=headers,verify=False)
如上所述,Google正在阻止您的请求,因为请求库中的默认用户代理是。您可以通过向请求中添加标题来伪造用户浏览器访问。其他网站中的用户代理

此外,您还可以将超时设置为请求在给定的秒数后停止等待响应。否则,脚本可能无限期挂起

你可以将同样的逻辑应用于雅虎、必应、百度、Yandex和其他搜索引擎

代码和:

部分输出:

标题:事实核查:格鲁吉亚并没有从国有企业中撤出可口可乐产品 建筑 链接:https://www.usatoday.com/story/news/factcheck/2021/04/09/fact-check-georgia-not-removing-coke-products-state-buildings/7129548002/ 标题:“人才竞赛”正在推动达美和可口可乐等公司 大声反对投票法 链接:https://www.businessinsider.com/georgia-voting-law-merits-response-delta-coca-cola-workers-2021-4 标题:一位分析师表示,可口可乐的收益为何可能包含好消息 链接:https://www.barrons.com/articles/cokes-stock-is-lagging-why-one-analyst-thinks-next-weeks-earnings-could-include-good-news-51618246989 或者,您也可以使用SerpApi。退房测试

要集成的代码:

import os
from serpapi import GoogleSearch

params = {
  "engine": "google",
  "q": "coca cola",
  "tbm": "nws",
  "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

for news_result in results["news_results"]:
   print(f"Title: {news_result['title']}\nLink: {news_result['link']}\n")
部分输出:

标题:一位分析师表示,可口可乐的收益为何可能包含好消息 链接:https://www.barrons.com/articles/cokes-stock-is-lagging-why-one-analyst-thinks-next-weeks-earnings-could-include-good-news-51618246989 标题:“人才竞赛”正在促使达美和可口可乐等公司公开反对投票法 链接:https://www.businessinsider.com/georgia-voting-law-merits-response-delta-coca-cola-workers-2021-4 标题:你现在不应该买可口可乐的两个原因 链接:https://seekingalpha.com/article/4418712-2-reasons-you-shouldnt-buy-coca-cola-now 标题:可口可乐令人担忧的迹象 链接:https://seekingalpha.com/article/4418630-worrying-signs-for-coca-cola 免责声明,我为SerpApi工作


我运行了它,它返回的结果对我来说很好。您确定运行的脚本正确吗?它返回soup,但是否返回printlensnippet\u文本和printlennews\u日期?对于我来说,它返回0,这意味着它不会通过soup返回任何东西Ctrl+F'd,并且没有class=st'或class=slp`的div。不确定昨天它是如何工作的,但有可能它被改变了。你能在浏览器中打开URL,仍然能找到包含这些类的div吗?是的,这对我来说很奇怪。当我在浏览器上进入“inspect”时,它仍然有class=st”和class=slp`这对我来说并不合适,所以也许他们正在慢慢地推出一个改变?谢谢,但你能解释一下你做了什么吗?我可以把这个逻辑应用到其他网站上吗,比如bing新闻,yahoo news?如果数据不是通过java脚本呈现的,那么您可以使用它。但是我已经提到,我添加了用户代理,一种绕过检测的方法是伪造您的用户代理,并在您向网站发出的每个请求中更改它。@taga:没有收到您的最后一条声明您想要什么?您是否也可以帮助我?对不起,不知道,伙计
import os
from serpapi import GoogleSearch

params = {
  "engine": "google",
  "q": "coca cola",
  "tbm": "nws",
  "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

for news_result in results["news_results"]:
   print(f"Title: {news_result['title']}\nLink: {news_result['link']}\n")