round( 1503.8700000000001, 2)
對你需要設(shè)精度的列遍歷就行了
只要你沒有重寫父類的方法,你不要利用super就可以,擁有父類B的方法,全繼承過來,當(dāng)然可以調(diào)用了
不寫了是 json 么。
json.dumps([{'type': 'a'}, {'type': 'b'}])你的cookie文件有問題,看樣子你是用了Chrome EditThisCookie 這個插件?
導(dǎo)出cookie的時候,插件默認是json格式,需要把它改成LWP:Perl格式才行。
標準的 Set-Cookies3 格式如下:
// Semicolon separated Cookie File
// This file was generated by EditThisCookie
// Details: http://www.cookiecentral.com/faq/#3.5
// Example: http://www.tutorialspoint.com/javascript/javascript_cookies.htm
// URL: https://segmentfault.com/q/1010000013426257
Set-Cookie3: _ga=GA1.2.1747822062.1519069386; path="/"; domain=.segmentfault.com; path_spec; expires="1582838034"; version=0
Set-Cookie3: _gid=GA1.2.1140460524.1519670333; path="/"; domain=.segmentfault.com; path_spec; expires="1519852434"; version=0
Set-Cookie3: afpCT=1; path="/"; domain=.segmentfault.com; path_spec; expires="1519769616"; version=0
具體cookielib是怎么運作的,可以參考一下源代碼。
修改:
試試這個代碼呢,可以嘗試用cookielib抓取某個網(wǎng)站的cookie和你的文件做一下格式上的對比。
我用了python2.7.14, 運行無礙。
# -*- coding: utf-8 -*-
import cookielib
import urllib2
def save_cookies_LWP():
filename = 'cookies_LWP.txt'
cookie = cookielib.LWPCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open("http://example.webscraping.com")
cookie.save(ignore_discard=True, ignore_expires=True)
save_cookies_LWP()
cookies_path = './cookies_LWP.txt'
load_cookiejar = cookielib.LWPCookieJar(cookies_path)
load_cookiejar.load()
抓取到的LWP格式的cookie文本內(nèi)容如下:
#LWP-Cookies-2.0
Set-Cookie3: session_data_places="\"2a114e7184c63428656b257f79b6021f:Ki6ay7ZhMIym9RoBvCMdiygjJkaKZOWbw8fWfKidfrWsrY8skd3837uUpNnbckadaVU00KxufrwCIcSfr9oCZYusTLXIbzVvfq9oJmTMKQCaaH8WRqA9fwUDKTgSK0EVOXX6DyOpxGxK2oQ8D4xHAfsVVst7ol3QwAT0Jsd_9FqIuhuuMUt1TL755EoZGYWt\""; path="/"; domain="example.webscraping.com"; path_spec; discard; version=0
Set-Cookie3: session_id_places=True; path="/"; domain="example.webscraping.com"; path_spec; discard; httponly=None; version=0
cookies_json.txt 內(nèi)容如下:
"""
[
{"domain": ".a.weixin.qq.com",
"expirationDate": 1519770087,
"hostOnly": false,
"httpOnly": false,
"name": "ADUSER_OPEN_ID",
"path": "/",
"sameSite": "no_restriction",
"secure": false,
"session": false,
"storeId": "0",
"value": "oQiT2txobu98sxd0xwB8CYtWRUFo",
"id": 1}
]
"""
cookies_json_path = './cookies_json.txt'
cookies_results = []
with open(cookies_json_path, 'r') as cookie_file:
cookies_list = json.loads(
cookie_file.read()
)
for c in cookies_list:
cookies_results.append(c)
print cookies_results
# 結(jié)果如下
"""
[{u'domain': u'.a.weixin.qq.com', u'name': u'ADUSER_OPEN_ID', u'storeId': u'0', u'value': u'oQiT2txobu98sxd0xwB8CYtWRUFo', u'session': False, u'hostOnly': False, u'expirationDate': 1519770087, u'sameSite': u'no_restriction', u'path': u'/', u'id': 1, u'httpOnly': False, u'secure': False}]
"""
因為你沒user.save()呀
已解決 通過結(jié)構(gòu)去處理
== 是比較兩個對象的值是否相等。
is 除了比較對象的值是否相等,還涉及到比較兩個對象的內(nèi)存地址是否相等。
>>> type(zhuangshi(A))
<class 'function'>
>>> zhuangshi(A)
<function zhuangshi.<locals>.inner at 0x7f7823a98b70> # 注意查看最后的內(nèi)存地址
>>> zhuangshi(A)
<function zhuangshi.<locals>.inner at 0x7f78208ac7b8> # 注意查看最后的內(nèi)存地址
>>> c, d = A, A
>>> type(c)
<class 'type'>
>>> type(d)
<class 'type'>
>>> c
<class '__main__.A'>
>>> d
<class '__main__.A'>
>>>
>>> c is d
True
>>>
綜上比較,分明是 zhuangshi 這個類定義的是 返回一個 inner 對象,每次調(diào)用都會執(zhí)行一次 inner 函數(shù),所以調(diào)用的內(nèi)存地址是不一樣的。
網(wǎng)頁經(jīng)過了gzip壓縮,需要解壓:
from urllib import request
import gzip
url = "http://odds.500.com/fenxi/yazhi-749525.shtml"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"
}
req = request.Request(url)
resp = request.urlopen(req)
f = gzip.decompress(resp.read())
print(f.decode('gbk'))
更推薦直接使用requests庫:
import requests
url = "http://odds.500.com/fenxi/yazhi-749525.shtml"
content = requests.get(url).content
print(content.decode('gbk'))CPython將代碼翻譯為python虛擬機指令。線程從指令集中獲取指令去執(zhí)行。GIL的全局鎖保證了同一時刻最多只能有一個線程去指令集獲取指令。為啥線程還要上鎖防止競爭呢? 這是因為CPython本身并不是線程安全的,也涉及到垃圾回收的??赡芤粋€我們認為一個動作可能需要多個指令去完成的, a = {} 在可能要 4~5 個指令來完成這個動作。
關(guān)于多線程的GIL問題,可以看看這篇關(guān)于源碼上的分析:https://www.hongweipeng.com/i...
python里面字節(jié)碼的執(zhí)行過程問題里寫的虛擬機運行方式是正確的,關(guān)于字節(jié)碼和執(zhí)行過程可以看看:https://www.hongweipeng.com/i... 這是對于一般表達式的字節(jié)碼和其執(zhí)行過程。
代碼里有中文,你在代碼第一行加上 # -- coding:utf-8 --
day2:
我把mysql容器換成mongo部署運行日志已經(jīng)不報錯了,但是還是沒有辦法運行。。。估計pyspider的docker部署還是要依賴于mysql。
day3:
我把環(huán)境放到win10下去執(zhí)行這個官網(wǎng)docker命令,錯誤還是依舊?,F(xiàn)在想方法能不能修改這個容器,或者說能夠找到容器的歷史版本。
day3.1:
https://github.com/binux/pysp...
在github上翻到一個解決方案,跟我想的一樣,但是我還是不會解決,準備去稍微學(xué)學(xué)docker的使用方法。
day5:
binux/pyspider容器mysql的解決方案的網(wǎng)址:
https://github.com/binux/pysp...
linux命令操作:
$:mkdir pyspiderproject && cd pyspiderproject
$:touch Dockerfile
$:gedit Dockerfile
文檔輸入:
FROM binux/pyspider
RUN pip install MySQL-python
VOLUME ["/opt/pyspider"]
ENTRYPOINT ["pyspider"]
EXPOSE 5000 23333 24444 25555
$:docker build -t binux/pyspider:my .
之后各種stop rm 容器,再按官方文檔操作。
找到了問題的解決方案,現(xiàn)在果然報錯變得不一樣了?,F(xiàn)在的報錯是:
$:docker logs result_worker
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory") (Background on this error at: http://sqlalche.me/e/e3q8)
我猜測是mysql的容器修改了操作方法,導(dǎo)致pyspider無法鏈接上這個版本的mysql容器。初步意向是尋找老版本的mysql的version使用。
day5.1:
最后我成功解決了該問題,果然是mysql的version對不上號,需要將mysql:latest 改為mysql:5.7
最后一路運行到最后,Dashboard打開速度特別慢,我心都快涼了,但是居然打開了,測試運行成功。完美。
setState() 是一個異步操作,后面的 console.log() 執(zhí)行的時候, state 還沒更新完,所以輸出的是之前的值。
提示錯誤就是所引用的元素已不再依附于當(dāng)前頁面了,原因大致是頁面跳轉(zhuǎn)或者刷新導(dǎo)致的頁面內(nèi)容變更。
估計你是想遍歷文章標題,點擊標題進入正文,然后抓取保存成pdf。
那么看代碼:
pdfkit.from_string(html, "F:\Confirm Data\{}.pdf".format(all[i].text), configuration=config)
在 click() 事件后,頁面都刷新或者跳轉(zhuǎn)了,從新頁面的源碼中引用 all[i].text 導(dǎo)致報錯。
這種時候就不要用不同的變量名區(qū)分同類對象了,應(yīng)該用數(shù)組或字典(當(dāng)然你強行要用變量名也是有辦法的)
people = [
{
'first_name': 'zeyu',
'last_name': 'zhou',
'age': 23,
'living_city': "huaian"
},
{
'first_name': 'asdfa',
'last_name': 'zhasdfadfaou',
'age': 293,
'living_city': "echo"
}
]
或
people = {
'zeyu': {
'first_name': 'zeyu',
'last_name': 'zhou',
'age': 23,
'living_city': "huaian"
},
'asdfa': {
'first_name': 'asdfa',
'last_name': 'zhasdfadfaou',
'age': 293,
'living_city': "echo"
}
}
數(shù)組的元素可以是字典,字典的value可以是另一個字典。
這個需要重寫父類的方法,把 verbose_name 標記是安全的字符串。
class MarkSafeCharField(models.FloatField):
def formfield(self, **kwargs):
kwargs['label'] = mark_safe(self.verbose_name)
return super().formfield(**kwargs)
# 在模型中
name= MarkSafeCharField(verbose_name='K<sub>2</sub>0')
就可以看到你要的了:
itchat 了解一下?
yield scrapy.Request(item['url'], callback=self.parse_city)
和yield scrapy.Request(url=url, callback=self.parse_province)
修改成yield from scrapy.Request(item['url'], callback=self.parse_city)
和yield from scrapy.Request(url=url, callback=self.parse_province)
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。