我试图使用Python中的Requests模块发布登录网站的请求,但它并没有真正起作用.我是新手...所以我无法弄清楚我是否应该创建我的用户名和密码cookie或我找到的某种类型的HTTP授权(??).
from pyquery import PyQuery
import requests
url = 'http://www.locationary.com/home/index2.jsp'
Run Code Online (Sandbox Code Playgroud)
所以现在,我想我应该使用"post"和cookies ....
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
r = requests.post(url, cookies=ck)
content = r.text
q = PyQuery(content)
title = q("title").text()
print title
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,我做饼干的事情错了......我不知道.
如果它没有正确登录,主页的标题应该出现在"Locationary.com",如果是,它应该是"主页".
如果您可以向我解释有关请求和cookie的一些事情并帮助我解决这个问题,我将非常感激.:d
谢谢.
......它还没有真正起作用.好的......所以这就是主页HTML在您登录之前所说的内容:
</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td>
Run Code Online (Sandbox Code Playgroud)
所以我认为我做得对,但输出仍然是"Locationary.com"
第二次编辑:
我希望能够保持登录状态很长时间,每当我要求域名下的网页,我希望要显示的内容,就好像我在被记录.
我正在使用PyQuery并希望打印链接列表,但无法弄清楚如何href从PyQuery语法中的每个链接获取属性.
这是我的代码:
e = pq(url=results_url)
links = e('li.moredetails a')
print len(links)
for link in links:
print link.attr('href')
Run Code Online (Sandbox Code Playgroud)
这打印10,然后给出以下错误:
AttributeError: 'HtmlElement' object has no attribute 'attr'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这让我完全疯了,我已经挣扎了好几个小时.任何帮助将非常感激.
我正在使用PyQuery 1.2.9(它构建在它之上lxml)来抓取这个URL.我只想获得该.linkoutlist部分中所有链接的列表.
这是我的全部要求:
response = requests.get('http://www.ncbi.nlm.nih.gov/pubmed/?term=The%20cost-effectiveness%20of%20mirtazapine%20versus%20paroxetine%20in%20treating%20people%20with%20depression%20in%20primary%20care')
doc = pq(response.content)
links = doc('#maincontent .linkoutlist a')
print links
Run Code Online (Sandbox Code Playgroud)
但是返回一个空数组.如果我使用此查询:
links = doc('#maincontent .linkoutlist')
Run Code Online (Sandbox Code Playgroud)
然后我得到这个HTML:
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude" class="linkoutlist">
<h4>Full Text Sources</h4>
<ul>
<li><a title="Full text at publisher's site" href="http://meta.wkhealth.com/pt/pt-core/template-journal/lwwgateway/media/landingpage.htm?issn=0268-1315&volume=19&issue=3&spage=125" ref="itool=Abstract&PrId=3159&uid=15107654&db=pubmed&log$=linkoutlink&nlmid=8609061" target="_blank">Lippincott Williams & Wilkins</a></li>
<li><a href="http://ovidsp.ovid.com/ovidweb.cgi?T=JS&PAGE=linkout&SEARCH=15107654.ui" ref="itool=Abstract&PrId=3682&uid=15107654&db=pubmed&log$=linkoutlink&nlmid=8609061" target="_blank">Ovid Technologies, Inc.</a></li>
</ul>
<h4>Other Literature Sources</h4>
...
</div>
Run Code Online (Sandbox Code Playgroud)
所以父选择器确实返回带有大量<a>标签的HTML .这似乎也是有效的HTML.
更多的实验表明lxml xmlns由于某种原因不喜欢开放div上的属性.
我如何在lxml中忽略它,并像普通HTML一样解析它?
更新:尝试ns_clean,仍然失败:
parser = etree.XMLParser(ns_clean=True)
tree = etree.parse(StringIO(response.content), …Run Code Online (Sandbox Code Playgroud) 我正在使用Python的pyquery抓取一个页面,我对它返回的类型感到困惑,特别是如何迭代结果列表.
如果我的HTML看起来像这样:
<div class="formwrap">blah blah <h3>Something interesting</h3></div>
<div class="formwrap">more rubbish <h3>Something else interesting</h3></div>
Run Code Online (Sandbox Code Playgroud)
如何<h3>逐个获取标签内部,以便我可以处理它们?我尝试着:
results_page = pq(response.read())
formwraps = results_page(".formwrap")
print type(formwraps)
print type([formwraps])
for my_div in [formwraps]:
print type(my_div)
print my_div("h3").text()
Run Code Online (Sandbox Code Playgroud)
这会产生:
<class 'pyquery.pyquery.PyQuery'>
<type 'list'>
<class 'pyquery.pyquery.PyQuery'>
Something interesting something else interesting
Run Code Online (Sandbox Code Playgroud)
看起来似乎没有实际的迭代.如何单独拉出每个元素?
来自新手的额外问题:周围的方括号是[a]什么?看起来它将一个特殊的Pyquery对象转换为一个列表.是[]标准的Python运算符吗?
------更新--------
我在pyquery文档中找到了'each' 函数.但是,我不明白如何将它用于我想要的东西.说我只想打印出来的内容<h3>.这会产生语法错误:为什么?
formwraps.each(lambda e: print e("h3").text())
Run Code Online (Sandbox Code Playgroud) 当我sudo pip install pyquery,sudo pip install lxml和sudo pip install cython,我得到非常相似的输出与相同的错误说:
x86_64-linux-gnu-gcc: error: unrecognized command line option ‘-fstack-protector-strong’
这是完整的点子输出sudo pip install pyquery:
Requirement already satisfied (use --upgrade to upgrade): pyquery in /usr/local/lib/python2.7/dist-packages
Downloading/unpacking lxml>=2.1 (from pyquery)
Running setup.py egg_info for package lxml
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
warnings.warn(msg)
Building lxml version 3.4.1.
Building without Cython.
Using build configuration of libxslt 1.1.28
Requirement already satisfied (use --upgrade to upgrade): cssselect in /usr/local/lib/python2.7/dist-packages/cssselect-0.9.1-py2.7.egg (from …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装PyQueryvia pip但是我收到了一个我不明白的错误.我使用的命令是:
sudo pip install pyquery
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Requirement already satisfied (use --upgrade to upgrade): pyquery in /usr/local/lib/python2.7/dist-packages
Downloading/unpacking lxml>=2.1 (from pyquery)
Running setup.py egg_info for package lxml
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
warnings.warn(msg)
Building lxml version 3.3.0.
Building without Cython.
ERROR: /bin/sh: 1: xslt-config: not found
** make sure the development packages of libxml2 and libxslt are installed **
Using build configuration of libxslt
Downloading/unpacking cssselect (from pyquery)
Running setup.py egg_info for package cssselect
no previously-included …Run Code Online (Sandbox Code Playgroud) 代码来自pyquery的指南
from pyquery import PyQuery
d = PyQuery('<p class="hello">Hi</p><p>Bye</p>')
d('p').filter(lambda i: PyQuery(this).text() == 'Hi')
Run Code Online (Sandbox Code Playgroud)
我的问题是this在第3行是一个未绑定的变量,并且从未在当前环境中定义,但上述代码仍然有效.
它怎么样?为什么不抱怨NameError: name 'this' is not defined?
似乎有事情发生在https://bitbucket.org/olauzanne/pyquery/src/c148e4445f49/pyquery/pyquery.py#cl-478,有人可以解释一下吗?
我正在使用pyquery来解析页面:
dom = PyQuery('http://zh.wikipedia.org/w/index.php', {'title': 'CSS', 'printable': 'yes', 'variant': 'zh-cn'})
content = dom('#mw-content-text > p').eq(0).text()
Run Code Online (Sandbox Code Playgroud)
但我得到的content是一个带有utf-8编码内容的unicode字符串:
u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8...'
Run Code Online (Sandbox Code Playgroud)
我怎么能把它转换成str没有丢失的内容?
说清楚:
我想要 conent == '\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'
不 conent == u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'
首先,python是一种很棒的语言.这是我使用python的第一个项目,我已经取得了很大的进步.
以下代码无法做到这一点的最佳方式.写一个类定义最惯用的方法是什么?
class Course:
crn = course = title = tipe = cr_hours = seats = instructor = days = begin = end = location = exam = ""
def __init__(self, pyQueryRow):
self.crn = Course.get_column(pyQueryRow, 0)
self.course = Course.get_column(pyQueryRow, 1)
self.title = Course.get_column(pyQueryRow, 2)
self.tipe = Course.get_column(pyQueryRow, 3)
self.cr_hours = Course.get_column(pyQueryRow, 4)
self.seats = Course.get_column(pyQueryRow, 5)
self.instructor = Course.get_column(pyQueryRow, 6)
self.days = Course.get_column(pyQueryRow, 7)
self.begin = Course.get_column(pyQueryRow, 8)
self.end = Course.get_column(pyQueryRow, 9)
self.location = Course.get_column(pyQueryRow, 10)
self.exam = Course.get_column(pyQueryRow, 11) …Run Code Online (Sandbox Code Playgroud) 您可以使用以下几种方法设置 css样式:
p = PyQuery('<p></p>')
p.css('font-size','16px')
p.css(['font-size'] = '16px'
p.css = {'font-size':'16px'}
Run Code Online (Sandbox Code Playgroud)
太好了,但如何让一个单独的 CSS样式?
p.css('font-size') # jquery-like method doesn't work
[<p>]
p.css['font-size'] # pythonic method doesn't work!
[<p>]
p.css.font_size # BeardedO's suggestion.
[<p>]
p.attr('style') # too much information.
'font-size: 16px; font-weight: bold'
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,不方便,不精确和unpython就好!前两个中的一个应该返回样式文本,当然?
有没有办法单独获得单一的CSS风格而不使用split()等工具?