小编use*_*451的帖子

如何使用Python抓取需要先登录的网站

首先,我认为值得一提的是,我知道有很多类似的问题但是没有一个对我有用......

我是Python,html和web scraper的新手.我正试图从需要先登录的网站上抓取用户信息.在我的测试中,我使用刮刀github的电子邮件设置作为示例.主页是" https://github.com/login ",目标页面是" https://github.com/settings/emails "

这是我尝试过的方法列表

##################################### Method 1
import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)


br.addheaders = [('User-agent', 'Chrome')]

# The site we will navigate into, handling it's session
br.open('https://github.com/login')

for f in br.forms():
    print f

br.select_form(nr=0)

# User credentials
br.form['login'] = 'myusername'
br.form['password'] = 'mypwd'

# Login
br.submit()

br.open('github.com/settings/emails').read()


################ Method 2
import urllib, urllib2, cookielib …
Run Code Online (Sandbox Code Playgroud)

python cookies authorization http scraper

31
推荐指数
3
解决办法
7万
查看次数

为什么我会收到 numpy.exp 的“ufunc 循环不支持 int 类型的参数 0”错误?

我有一个数据框,我想对列中的行子集执行指数计算。我尝试了三个版本的代码,其中两个有效。但我不明白为什么一个版本给我这个错误。

import numpy as np
Run Code Online (Sandbox Code Playgroud)

版本 1(工作)

np.exp(test * 1.0)
Run Code Online (Sandbox Code Playgroud)

版本 2(工作)

np.exp(test.to_list())
Run Code Online (Sandbox Code Playgroud)

版本 3(错误)

np.exp(test)
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

AttributeError                            Traceback (most recent call last)
AttributeError: 'int' object has no attribute 'exp'

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
<ipython-input-161-9d5afc93942c> in <module>()
----> 1 np.exp(pd_feature.loc[(pd_feature[col] > 0) & (pd_feature[col] < 700), col])

TypeError: loop of ufunc does not support argument 0 of type int which has no callable exp method
Run Code Online (Sandbox Code Playgroud)

测试数据通过以下方式生成:

test …
Run Code Online (Sandbox Code Playgroud)

python numpy exponential

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

正则表达式中[^.]*的含义是什么?

我试图从以下文本中获得482.75: <span id="yfs_l84_aapl">482.75</span>

我使用的正则表达式是:regex = '<span id="yfs_l84_[^.]*">(.+?)</span>'它工作正常.

但是我不明白的是为什么[^.]*可以在这里匹配aapl?我的理解是.指除换行符之外的任何字符; 和^表示否定者.所以[^.]应该是换行符,[^.]*应该是任意数量的新行.然而,这种理论与现实世界的实施相反.

任何帮助表示赞赏,并提前致谢.


我使用的python代码:

import urllib
import re 
htmlfile = urllib.urlopen("http://finance.yahoo.com/q?s=AAPL&ql=0")
htmltext = htmlfile.read()
regex = '<span id="yfs_l84_[^.]*">(.+?)</span>'
pattern = re.compile(regex)
price = re.findall(pattern, htmltext)
print "the price of of aapl is", price[0]
Run Code Online (Sandbox Code Playgroud)

python regex

9
推荐指数
1
解决办法
6265
查看次数

无法使用Spark-Avro在DataProc Spark中读取Avro

我在Google DataProc上有一个群集(图像1.4),并且我想用Spark从Google云存储读取avro文件。我遵循此指南:Spark阅读avro

我运行的命令是:

gcloud dataproc jobs submit pyspark test.py \
--cluster $CLUSTER_NAME \
--region $REGION \
--properties spark.jars.packages='org.apache.spark:spark-avro_2.12:2.4.1'
Run Code Online (Sandbox Code Playgroud)

test.py非常简单,只是

from pyspark.sql import SparkSession

from pyspark.sql import SQLContext

spark = SparkSession.builder.appName('test').getOrCreate()

df = spark.read.format("avro").load("gs://mybucket/abc.avro")

df.show()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Py4JJavaError: An error occurred while calling o196.load.
: java.util.ServiceConfigurationError: org.apache.spark.sql.sources.DataSourceRegister: Provider org.apache.spark.sql.avro.AvroFileFormat could not be instantiated
    at java.util.ServiceLoader.fail(ServiceLoader.java:232)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at scala.collection.convert.Wrappers$JIteratorWrapper.next(Wrappers.scala:43)
    at scala.collection.Iterator$class.foreach(Iterator.scala:891)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:247)
    at scala.collection.TraversableLike$class.filter(TraversableLike.scala:259)
    at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
    at …
Run Code Online (Sandbox Code Playgroud)

pyspark google-cloud-dataproc spark-avro

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

DataProc Presto 会自动选取新节点吗?

我有一个包含 10 个节点并安装了 Presto 的 DataProc 集群。集群Autoscaling功能开启。我想知道当Presto运行并且集群扩展时,Presto是否能够自动拾取并使用额外的节点?我没有从 Google 文档中找到答案。

我担心的是我需要手动重新启动 Presto,这违背了自动缩放的目的。我的希望是当 presto 得到更大的工作时集群和自动缩放。

autoscaling presto google-cloud-platform google-cloud-dataproc

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

从 Pandas 数据帧创建 BigQuery 表,无需明确指定架构

我有一个 Pandas 数据框,想从中创建一个 BigQuery 表。我知道有很多帖子都在问这个问题,但到目前为止我能找到的所有答案都需要明确指定每一列的架构。例如:

from google.cloud import bigquery as bq

client = bq.Client()

dataset_ref = client.dataset('my_dataset', project = 'my_project')
table_ref = dataset_ref.table('my_table')  

job_config = bq.LoadJobConfig( 
 schema=[ 
     bq.SchemaField("a", bq.enums.SqlTypeNames.STRING),
     bq.SchemaField("b", bq.enums.SqlTypeNames.INT64), 
     bq.SchemaField("c", bq.enums.SqlTypeNames.FLOAT64),         
 ]
) 

client.load_table_from_dataframe(my_df, table_ref, job_config=job_config).result()
Run Code Online (Sandbox Code Playgroud)

但是,有时我有一个包含许多列(例如 100 列)的数据框,指定所有列确实很重要。有没有办法有效地做到这一点?

顺便说一句,我发现这篇文章有类似的问题:Efficiently write a Pandas dataframe to Google BigQuery 但似乎bq.Schema.from_dataframe不存在:

AttributeError: module 'google.cloud.bigquery' has no attribute 'Schema'
Run Code Online (Sandbox Code Playgroud)

python pandas google-bigquery

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

创建项目后,创建一个继承全局站点包的PyCharm项目吗?

我是PyCharm和Mac OS的新手。我使用VirtualEnv在PyCharm中创建了一个python项目,但没有选择“继承全局站点包”选项。经过一段时间的研究,我意识到我需要继承一些全局安装的软件包。

这里有一个解决方法,可以创建共享的虚拟环境并使用它:创建共享的虚拟环境。但是,我想知道是否有什么方法可以更改当前项目,而不是创建新项目或创建共享虚拟环境?


一个单独的问题:假设我有一个继承全局包的项目。如果在创建项目后,我在全球范围内安装了其他软件包,这些软件包在该项目中是否可用?

非常感谢您的帮助。任何建议表示赞赏。

python pycharm

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