gpt4 book ai didi

python - 如何使用 Python Mechanize 自动添加 Google 快讯

转载 作者:行者123 更新时间:2023-11-28 23:04:47 24 4
gpt4 key购买 nike

我知道这里有一个 Python API 出售 (http://oktaykilic.com/my-projects/google-alerts-api-python/),但我想了解为什么我这样做现在这样做是行不通的。

这是我目前所拥有的:

class GAlerts():

def __init__(self, uName = 'USERNAME', passWord = 'PASSWORD'):

self.uName = uName
self.passWord = passWord

def addAlert(self):

self.cj = mechanize.CookieJar()
loginURL = 'https://www.google.com/accounts/ServiceLogin?hl=en&service=alerts&continue=http://www.google.com/alerts'
alertsURL = 'http://www.google.com/alerts'

#log into google
initialRequest = mechanize.Request(loginURL)
response = mechanize.urlopen(initialRequest)

#put in form info
forms = ClientForm.ParseResponse(response, backwards_compat=False)
forms[0]['Email'] = self.uName
forms[0]['Passwd'] = self.passWord

#click form and get cookies
request2 = forms[0].click()
response2 = mechanize.urlopen(request2)
self.cj.extract_cookies(response, initialRequest)


#now go to alerts page with cookies
request3 = mechanize.Request(alertsURL)
self.cj.add_cookie_header(request3)
response3 = mechanize.urlopen(request3)

#parse forms on this page
formsAdd = ClientForm.ParseResponse(response3, backwards_compat=False)
formsAdd[0]['q'] = 'Hines Ward'

#click it and submit
request4 = formsAdd[0].click()
self.cj.add_cookie_header(request4)
response4 = mechanize.urlopen(request4)
print response4.read()


myAlerter = GAlerts()
myAlerter.addAlert()

据我所知,它成功登录并进入添加警报主页,但是当我输入查询并“单击”提交时,它会将我发送到一个页面,上面写着“请输入有效的电子邮件地址”。我缺少某种身份验证吗?我也不明白如何更改谷歌自定义下拉菜单中的值?有什么想法吗?

谢谢

最佳答案

自定义下拉菜单是使用 JavaScript 完成的,因此正确的解决方案是找出 URL 参数,然后尝试重现它们(这可能是它现在无法按预期工作的原因 - 你是当您在浏览器中访问网站时,省略了通常由 JavaScript 设置的必需 URL 参数)。

懒惰的解决方案是使用 galerts库,看起来它完全可以满足您的需求。

对涉及 Mechanize (或一般的屏幕抓取)的 future 项目的一些提示:

  • 使用Fiddler ,一个非常有用的 HTTP 调试工具。它捕获来自大多数浏览器的 HTTP 流量,并允许您查看浏览器请求的内容。然后您可以手动制作所需的请求,如果它不起作用,您只需进行比较。 Firebug 或 Google Chrome 的开发人员工具 等工具也能派上用场,尤其是对于大量异步请求。 (您必须在浏览器对象上调用 set_proxies 才能将其与 Fiddler 一起使用,请参阅文档)
  • 出于调试目的,执行类似for f in self.forms(): print f 的操作。这会向您显示页面上已识别的所有表单及其名称。
  • 处理 cookie 是重复的,所以 - 惊喜! - 有一种简单的方法可以使其自动化。只需在您的浏览器类构造函数中执行此操作:self.set_cookiejar(cookielib.CookieJar())。这会自动跟踪 cookie。
  • 我长期以来一直依赖自定义解析,如 BeautifulSoup(我仍然在某些特殊情况下使用它),但在大多数情况下,网络屏幕抓取的最快方法是使用 XPath(对于例如,lxml 有一个很好的实现)。

关于python - 如何使用 Python Mechanize 自动添加 Google 快讯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com