Python 用登录页面抓取网站
我目前使用以下脚本从网站登录到时间Python 用登录页面抓取网站,python,selenium-chromedriver,web-scripting,Python,Selenium Chromedriver,Web Scripting,我目前使用以下脚本从网站登录到时间 browser = webdriver.Chrome('E:/Shared Folders/Users/runnerjp/chromedriver/chromedriver.exe') browser.get("https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F") time.sleep(3) username = browser.find_el
browser = webdriver.Chrome('E:/Shared Folders/Users/runnerjp/chromedriver/chromedriver.exe')
browser.get("https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F")
time.sleep(3)
username = browser.find_element_by_id("EmailAddress")
password = browser.find_element_by_id("Password")
username.send_keys("usr")
password.send_keys("pass")
login_attempt = browser.find_element_by_xpath("//input[@type='submit']")
time.sleep(3)
login_attempt.submit()
它可以工作,但我发现使用ChromeWeb驱动程序对我的CPU造成了冲击。是否有其他代码可供我使用,但这并不意味着我需要实际加载页面才能登录?请使用
请求
。您可以使用它登录:
import requests
requests.get('https://api.github.com/user', auth=('user', 'pass'))
更多信息请点击此处:
使用无头浏览器将大大减少CPU和内存的消耗,请尝试使用Chrome浏览器。这里有一篇关于将PhantomJS与selenium结合使用的博客文章:
另一种选择是“抓取”模块:
from grab import Grab
g = Grab()
g.go('https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F')
g.doc.set_input('EmailAddress','some@email.com')
g.doc.set_input('Password','somepass')
g.doc.submit()
print g.doc.body
你可以使用mechanize,在我的旧笔记本中,我花了3.22秒登录和解析该站点
from mechanize import Browser
import time #just to check elapsed time and check performance
started_time = time.time()
browser = Browser()
url = 'https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F'
browser.open(url)
browser.select_form(nr = 0)
browser["EmailAddress"] = 'putyouremailhere'
browser["Password"] = 'p4ssw0rd'
logged = browser.submit()
redirected_url = logged.read()
print redirected_url
#you can delete this section:
elapsed_time = time.time() - started_time
print elapsed_time,' seconds'
我希望有帮助!:) 这里的所有答案都有一些优点,但这取决于被刮取的网站类型以及如何验证登录。
如果网页通过javascript/ajax请求等生成部分或全部内容,那么使用selenium是唯一的方法,因为这允许执行javascript。然而,为了将cpu使用率保持在最低限度,您可以使用“无头”浏览器,如phantomjs。phantomjs使用与chrome相同的html引擎和javascript引擎,因此您可以使用chrome测试代码,并在最后切换 如果页面内容为“静态”,则可以使用
请求
模块。
但是,执行此操作的方法将取决于网页是否使用嵌入http协议的“基本”身份验证(大多数情况下不使用),在这种情况下:
import requests
requests.get('https://api.github.com/user', auth=('user', 'pass'))
正如CodeMonkey所建议的
但是,如果它使用了其他内容,您必须分析登录表单,查看post请求发送到的地址,并使用该地址构建请求,并将用户名/密码放入表单上元素ID的字段中。有几种方法可以执行此操作:
是的,除了硒或铬之外,我应该说,除了无头浏览器之外,您应该使用http(调用url)的概念 请求和urllib模块将在这里提供帮助 为此,您需要确定方法的参数和类型。一旦确定了调用url所需的内容,就可以使用request或urllib。你还需要跟踪你正在得到或将得到什么样的回应 这是一个很好的文档 使用请求的示例: 案例:这里我们提交的表单有两个字段id和pwd,表单中指定的方法是post,表单中指定的名称分别是user_id和user_pwd for id和pwd。点击一个按钮,它就会调用“某个url” 关于如何使用请求、cookie和selenium,请参考我的其他答案。我向您推荐。它在引擎盖下使用了扭曲,因此非常高效 如果您需要执行JavaScript,还有一个scrapy启动包: 在Scrapy FAQ中有一个关于登录页面的特殊页面:您可以使用TestCafe TestCafe是用于web功能测试(e2e测试)的免费开源框架。TestCafe基于Node.js,根本不使用WebDriver TestCafe支持的测试在服务器端执行。为了获得DOM元素,TestCafe提供了强大灵活的选择器系统。TestCafe可以使用ClientFunction特性在测试过的网页上执行JavaScript(请参阅我们的文档) TestCafe测试真的很快,你自己看看吧。但由于内置智能等待系统,高速试运行不会影响稳定性 TestCafe的安装非常简单: 1) 检查电脑上是否有Node.js(或安装) 2) 要安装TestCafe open cmd并键入:
npm install -g testcafe
写作测试不是一门火箭科学。下面是一个快速入门:1)将以下代码复制粘贴到文本编辑器中,并将其另存为“test.js”
import { Selector } from ‘testcafe’;
fixture `Getting Started`
.page `http://devexpress.github.io/testcafe/example`;
test(‘My first test’, async t => {
await t
.typeText(‘#developer-name’, ‘John Smith’)
.click(‘#submit-button’)
.expect(Selector(‘#article-header’).innerText).eql(‘Thank you, John Smith!‘);
});
2) 通过在cmd中键入以下命令,在浏览器(如chrome)中运行测试:
testcafe chrome test.js
3) 在控制台输出中获取描述性结果
TestCafe允许您针对各种浏览器进行测试:本地、远程(在设备上,无论是Raspberry Pi浏览器还是iOS Safari浏览器)、云(如Saint Labs)或无头(如噩梦)。这意味着您可以轻松地将TestCafe与连续集成基础架构结合使用
You can use the same to scrape data and save to file easily
回溯(最近一次调用):文件“E:\Shared Folders\Users\runnerjp\FootballPload\Scrape timeform.py”,第1行,从mechanize导入浏览器文件“C:\Python34\lib\site packages\mechanize\u init\uuuz.py”,第119行,在from\u version import version importorror:没有名为“\u version”的模块中,我在运行代码时遇到上述错误-im使用Python3.4并进行了mechanizeinstalled@emmaperkins啊!看来mechanize还不支持Python3.x!但是您可以使用特定的2.x版本的Python运行脚本!
You can use the same to scrape data and save to file easily