pip2 install xxx
403 Forbidden 錯(cuò)誤,大多是被服務(wù)器屏蔽了,拒絕提供返回內(nèi)容
一般可以通過(guò)更換服務(wù)器ip、設(shè)置代理服務(wù)器,去爬取
最好的辦法,是通過(guò)模擬瀏覽器人工采集爬取
selenium + xvfb + firefox + proxy ip
下面是我的解決方案,僅供參考,相互學(xué)習(xí)
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.proxy import *
from pyvirtualdisplay import Display
# from xvfbwrapper import Xvfb
import bs4, os
from base64 import b64encode
import sys
reload(sys)
sys.setdefaultencoding('utf8')
## webdriver + firefox (不使用代理,爬取網(wǎng)頁(yè))
def spider_url_firefox(url):
browser = None
display = None
try:
display = Display(visible=0, size=(800, 600))
display.start()
browser = webdriver.Firefox() # 打開(kāi) FireFox 瀏覽器
browser.get(url)
content = browser.page_source
print("content: " + str(content))
finally:
if browser: browser.quit()
if display: display.stop()
## webdriver + firefox + proxy + whiteip (無(wú)密碼,或白名單ip授權(quán))
## 米撲代理:https://proxy.mimvp.com
def spider_url_firefox_by_whiteip(url):
browser = None
display = None
## 白名單ip,請(qǐng)見(jiàn)米撲代理會(huì)員中心: https://proxy.mimvp.com/usercenter/userinfo.php?p=whiteip
mimvp_proxy = {
'ip' : '140.143.62.84', # ip
'port_https' : 19480, # http, https
'port_socks' : 19481, # socks5
'username' : 'mimvp-user',
'password' : 'mimvp-pass'
}
try:
display = Display(visible=0, size=(800, 600))
display.start()
profile = webdriver.FirefoxProfile()
# add proxy
profile.set_preference('network.proxy.type', 1) # ProxyType.MANUAL = 1
if url.startswith("http://"):
profile.set_preference('network.proxy.http', mimvp_proxy['ip'])
profile.set_preference('network.proxy.http_port', mimvp_proxy['port_https']) # 訪問(wèn)http網(wǎng)站
elif url.startswith("https://"):
profile.set_preference('network.proxy.ssl', mimvp_proxy['ip'])
profile.set_preference('network.proxy.ssl_port', mimvp_proxy['port_https']) # 訪問(wèn)https網(wǎng)站
else:
profile.set_preference('network.proxy.socks', mimvp_proxy['ip'])
profile.set_preference('network.proxy.socks_port', mimvp_proxy['port_socks'])
profile.set_preference('network.proxy.ftp', mimvp_proxy['ip'])
profile.set_preference('network.proxy.ftp_port', mimvp_proxy['port_https'])
profile.set_preference('network.proxy.no_proxies_on', 'localhost,127.0.0.1')
## 不存在此用法,不能這么設(shè)置用戶名密碼 (舍棄)
# profile.set_preference("network.proxy.username", 'mimvp-user')
# profile.set_preference("network.proxy.password", 'mimvp-pass')
profile.update_preferences()
browser = webdriver.Firefox(profile) # 打開(kāi) FireFox 瀏覽器
browser.get(url)
content = browser.page_source
print("content: " + str(content))
finally:
if browser: browser.quit()
if display: display.stop()
對(duì)方是否有csrf校驗(yàn),你需要看cookie里面或者get請(qǐng)求時(shí)是否有特殊token
這個(gè)代理IP已經(jīng)失效,換其他代理IP測(cè)試
import requests
url = 'http://ip.chinaz.com/getip.aspx'
proxy = {'http': 'http://177.130.55.164:20183',
'https': 'https://177.130.55.164:20183'}
r = requests.get(url, proxies=proxy, timeout=1)
print r.text你是說(shuō)這樣?
import re
data = '''
Name Server: ns3.baidu.com
Name Server: ns2.baidu.com
Name Server: dns.baidu.com
Name Server: ns7.baidu.com
Name Server: ns4.baidu.com
'''
pattern = re.compile('Name Server: (.*)')
result = pattern.findall(data)
print(result)
結(jié)果:['ns3.baidu.com', 'ns2.baidu.com', 'dns.baidu.com', 'ns7.baidu.com', 'ns4.baidu.com']
res.render已經(jīng)輸出渲染視圖了,此時(shí)不應(yīng)該再調(diào)用next,會(huì)傳遞到下一個(gè)方法重復(fù)輸出
* 這是文件的通配符, *.png代表后綴名為.png的任何文件
因?yàn)閮蓚€(gè)線程里一直在while True,可以增加一個(gè)結(jié)束信號(hào),例如給隊(duì)列里發(fā)送一個(gè)-1,線程接受到的話退出while循環(huán),要注意兩個(gè)隊(duì)列都要發(fā)送結(jié)束信號(hào)。
+代碼增加代碼,-代表刪除,而+++-,個(gè)人理解就是說(shuō)發(fā)生了多次改動(dòng),包含增加、刪除代碼,因?yàn)槟阏f(shuō)是git pull下來(lái)的,他可能就不是說(shuō)僅代表此次對(duì)文件的修改,可能還包含前幾次你的提交里對(duì)該文件的修改,或者說(shuō),有分支,然后另一開(kāi)發(fā)者也對(duì)該文件進(jìn)行了修改,記錄的總數(shù)
兄弟你最后解決了這個(gè)問(wèn)題嗎?
在 logger 部分加上你想打日志的地方就行了, 一般加 app 名稱(chēng)就行了, 下面是一個(gè)例子, 具體的, 還是建議去看官方文檔, 那里面說(shuō)的更加詳細(xì)點(diǎn).
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'}
},
'filters': {
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/all.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/error.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/script.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'scprits_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/script.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
}
},
'loggers': {
'django': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': False
},
'django.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False,
},
'scripts': {
'handlers': ['scprits_handler'],
'level': 'INFO',
'propagate': False
},
'blog.views': {
'handlers': ['default', 'error'],
'level': 'DEBUG',
'propagate': True
},
}
}問(wèn)題解決了 沒(méi)有創(chuàng)建imagess目錄
你這個(gè)問(wèn)題在post_data里面
這一塊的數(shù)據(jù)應(yīng)該寫(xiě)成字符串格式,否則requests對(duì)post_data數(shù)據(jù)進(jìn)行解析的時(shí)候會(huì)出偏差
或者你可以用data = urllib.parse.urlencode(post_data)這樣預(yù)處理一下再post
為什么要把文件直傳服務(wù)器,七牛呢,傳七牛然后返回文件名
有時(shí)候太久會(huì)報(bào)TimeOut錯(cuò)誤.這個(gè)問(wèn)題調(diào)整nginx的配置就可以
但是不建議直傳大文件
沒(méi)猜錯(cuò)的話,這兩句代碼的問(wèn)題
print(f.read()) # 已經(jīng)把內(nèi)容讀完了
str=f.read() # 所以 str 是空的
換成這樣試下:
str=f.read()
print(str)檢查一下MIDDLEWARE_CLASSES里是否開(kāi)啟了django.contrib.auth.middleware.AuthenticationMiddleware
另外最好的調(diào)試方法是斷點(diǎn)一步步看看是什么原因
之前裝過(guò)VSCode的open in browser插件,不成功。然后裝了Live server這個(gè)插件。配置好然后運(yùn)行之后,可以直接以localhost的方式打開(kāi)你的頁(yè)面。
或者直接配置一個(gè)本地的服務(wù)器,通過(guò)訪問(wèn)網(wǎng)址的方式訪問(wèn)到你的工作目錄,這種方法最穩(wěn)定。
大哥你仔細(xì)看你的代碼,你要return的data被for循環(huán)覆蓋了,第二個(gè)代碼你用了print(),當(dāng)然每次循環(huán)只是把data打印出來(lái)了
item = NewsItem()
這句放到循環(huán)里面。
LineSentence類(lèi)的要求是:
Simple format: one sentence = one line; words already preprocessed and separated by whitespace
你需要自己簡(jiǎn)單預(yù)處理一下。
現(xiàn)在比較流行的是doc2vec,有興趣可以看下:https://segmentfault.com/a/11...
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。