0%

✔️ 您可以使用headers参数将REFERER手动传递给每个请求:

1
yield Request(parse=..., headers={'referer':...})

RefererMiddleware会执行相同的操作,并自动从上一个响应中获取引荐来源网址。

✔️ 尝试以下代码。您需要单击每个分页链接才能到达下一页。您将获得所有100条评论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time
url = "https://www.innisfree.com/kr/ko/ProductReviewList.do"
chromedriver = r'C:\Users\hhm\Downloads\chromedriver_win32\chromedriver.exe'
driver = webdriver.Chrome(chromedriver)
driver.get(url)

for i in range(2,12):
time.sleep(2)
soup=BeautifulSoup(driver.page_source,'html.parser')
nTypes = soup.select('.reviewList ul .newType div[class^=reviewCon] .reviewConTxt')
for nType in nTypes:
product = nType.select_one('.pdtName').text
print(product)
if i==11:
break
nextbutton=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[@class='num']/a[text()='" +str(i)+"']")))
driver.execute_script("arguments[0].click();",nextbutton)

❓ 我正在尝试使Python脚本在通过ssh连接到的Linux服务器上运行。 该脚本使用mysqldb。 我有我需要的所有其他组件,但是当我尝试通过setuptools安装mySQLdb时,如下所示:

1
python setup.py install

我得到以下与mysql_config命令相关的错误报告。

1
2
3
4
5
6
7
8
9
sh: mysql_config: command not found
Traceback (most recent call last):
File "setup.py", line 15, in
metadata, options = get_config()
File "/usr/lib/python2.5/MySQL-python-1.2.3/setup_posix.py", line 43, in get_config
libs = mysql_config("libs_r")
File "/usr/lib/python2.5/MySQL-python-1.2.3/setup_posix.py", line 24, in mysql_config
raise EnvironmentError("%s not found" % (mysql_config.path,))
EnvironmentError: mysql_config not found

✔️ mySQLdb是mysql的python接口,但不是mysql本身。 显然,mySQLdb需要命令mysql_config,因此您需要先安装该命令。

您可以通过从shell运行mysql来确认自己是否安装了mysql吗? 这应该给您一个响应,而不是mysql:not found。您正在使用哪个Linux发行版? Mysql已为大多数Linux发行版预先打包。 例如,对于debian / ubuntu,安装mysql就像

1
sudo apt-get install mysql-server

mysql-config位于不同的软件包中,可以从安装(同样,假设debian / ubuntu):

1
sudo apt-get install libmysqlclient-dev

如果您使用的是mariadb,请替换为mysql,然后运行

1
sudo apt-get install libmariadbclient-dev

✔️ FTP协议不允许您在文件开头插入一行。

您将必须下载整个文件,在本地进行编辑,然后重新上传回去。像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from io import BytesIO
from ftplib import FTP

ftp = FTP(host, user, passwd)

f = BytesIO()
# Write header
f.write(str.encode("header\n"))
path = "/remote/path/file.csv"
# Append original contents
ftp.retrbinary("RETR " + path, f.write)
# Re-upload back
f.seek(0, 0)
ftp.storbinary("STOR " + path, f)

✔️ 您可以使用ast.literal_eval,这将给您一个元组:

1
2
import ast
df.LABELS = df.LABELS.apply(ast.literal_eval)

如果确实需要列表,请使用:

1
df.LABELS.apply(lambda s: list(ast.literal_eval(s)))

✔️ 有关较新的版本,请参阅适用于Python 2和Python 3的importlib.import_module

您也可以使用exec。或者使用__import__,您可以通过执行以下操作导入模块列表:

1
2
3
4
>>> moduleNames = ['sys', 'os', 're', 'unittest'] 
>>> moduleNames
['sys', 'os', 're', 'unittest']
>>> modules = map(__import__, moduleNames)

❓ 有一个字典长这样

1
my_map = {'a': 1, 'b': 2}

怎么反转成这样

1
inv_map = {1: 'a', 2: 'b'}

✔️ For Python 2.7.x

1
inv_map = {v: k for k, v in my_map.iteritems()}

For Python 3+:

1
inv_map = {v: k for k, v in my_map.items()}

❓ Python ElementTree模块:使用findfindall方法时,如何忽略XML文件的命名空间以找到匹配的元素


✔️ 与其修改XML文档本身,不如解析它,然后修改结果中的标记,这是最好的。 这样,您可以处理多个名称空间和名称空间别名:

1
2
3
4
5
6
7
8
9
10
from StringIO import StringIO
import xml.etree.ElementTree as ET

# instead of ET.fromstring(xml)
it = ET.iterparse(StringIO(xml))
for _, el in it:
prefix, has_namespace, postfix = el.tag.partition('}')
if has_namespace:
el.tag = postfix # strip all namespaces
root = it.root

✔️ 如果lambda函数令人困惑,则apply也可以与函数定义一起使用。 (还有一个函数numpy.average计算加权平均值)

1
2
3
4
5
6
7
import numpy as np
def weighted_average(group):
weights = group['Volume']
height = group['Height']
return np.average(height,weights=weights)

df.groupby(['STAND_ID','Species']).apply(func = weighted_average).unstack()

❓ 我找到了boto + MFA的示例:

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sample-code.html

但是我找不到如何使用boto3的示例。 任何等效的boto3示例?


✔️ 下面的代码有效,但是您必须使用具有正确凭据的〜/.boto文件。 SerialNumber是您的MFA设备序列号或其完整的AWS信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python

import boto3

mfa_TOTP = raw_input("Enter the MFA code: ")

client=boto3.client( 'sts' )

response = client.assume_role(
RoleArn='arn:aws:iam::123456789:role/admin_full',
RoleSessionName='mysession',
DurationSeconds=3600,
SerialNumber='arn:aws:iam::987654321:mfa/myaccount',
TokenCode=mfa_TOTP,
)