标签: pyquery

如何使用Python的Requests模块"登录"网站?

我试图使用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"

第二次编辑:

我希望能够保持登录状态很长时间,每当我要求域名下的网页,我希望要显示的内容,就好像我在被记录.

python pyquery python-requests

82
推荐指数
6
解决办法
18万
查看次数

在PyQuery中获取属性?

我正在使用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)

我究竟做错了什么?

python screen-scraping pyquery

18
推荐指数
1
解决办法
1万
查看次数

使用lxml来解析namepaced HTML?

这让我完全疯了,我已经挣扎了好几个小时.任何帮助将非常感激.

我正在使用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&amp;volume=19&amp;issue=3&amp;spage=125" ref="itool=Abstract&amp;PrId=3159&amp;uid=15107654&amp;db=pubmed&amp;log$=linkoutlink&amp;nlmid=8609061" target="_blank">Lippincott Williams &amp; Wilkins</a></li>
      <li><a href="http://ovidsp.ovid.com/ovidweb.cgi?T=JS&amp;PAGE=linkout&amp;SEARCH=15107654.ui" ref="itool=Abstract&amp;PrId=3682&amp;uid=15107654&amp;db=pubmed&amp;log$=linkoutlink&amp;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)

html python lxml html-parsing pyquery

16
推荐指数
1
解决办法
304
查看次数

迭代pyquery中的对象

我正在使用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)

python pyquery

13
推荐指数
5
解决办法
7579
查看次数

pip错误:无法识别的命令行选项'-fstack-protector-strong'

当我sudo pip install pyquery,sudo pip install lxmlsudo 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)

python lxml pip cython pyquery

13
推荐指数
1
解决办法
3万
查看次数

通过Pip安装PyQuery

我正在尝试安装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)

python pip pyquery

12
推荐指数
1
解决办法
1万
查看次数

为什么这个未绑定的变量可以在Python(pyquery)中工作?

代码来自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,有人可以解释一下吗?

python variables pyquery

11
推荐指数
1
解决办法
562
查看次数

将utf-8字符串作为内容转换为str的unicode

我正在使用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 utf-8 python-2.x mojibake pyquery

10
推荐指数
1
解决办法
4万
查看次数

我如何使这个python代码不那么难看

首先,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)

python idioms pyquery

8
推荐指数
1
解决办法
1163
查看次数

如何在pyquery中获得单独的CSS样式

您可以使用以下几种方法设置 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()等工具?

css python pyquery

8
推荐指数
1
解决办法
650
查看次数