⑴ 誰用過python中的re來抓取網頁,能否給個例子,謝謝
這是我寫的一個非常簡單的抓取頁面的腳本,作用為獲得指定URL的所有鏈接地址並獲取所有鏈接的標題。
===========geturls.py================
#coding:utf-8
import urllib
import urlparse
import re
import socket
import threading
#定義鏈接正則
urlre = re.compile(r"href=[\"']?([^ >\"']+)")
titlere = re.compile(r"<title>(.*?)</title>",re.I)
#設置超時時間為10秒
timeout = 10
socket.setdefaulttimeout(timeout)
#定義最高線程數
max = 10
#定義當前線程數
current = 0
def gettitle(url):
global current
try:
content = urllib.urlopen(url).read()
except:
current -= 1
return
if titlere.search(content):
title = titlere.search(content).group(1)
try:
title = title.decode('gbk').encode('utf-8')
except:
title = title
else:
title = "無標題"
print "%s: %s" % (url,title)
current -= 1
return
def geturls(url):
global current,max
ts = []
content = urllib.urlopen(url)
#使用set去重
result = set()
for eachline in content:
if urlre.findall(eachline):
temp = urlre.findall(eachline)
for x in temp:
#如果為站內鏈接,前面加上url
if not x.startswith("http:"):
x = urlparse.urljoin(url,x)
#不記錄js和css文件
if not x.endswith(".js") and not x.endswith(".css"):
result.add(x)
threads = []
for url in result:
t = threading.Thread(target=gettitle,args=(url,))
threads.append(t)
i = 0
while i < len(threads):
if current < max:
threads[i].start()
i += 1
current += 1
else:
pass
geturls("http://www..com")
使用正則表達式(re)只能做到一些比較簡單或者機械的功能,如果需要更強大的網頁分析功能,請嘗試一下beautiful soup或者pyquery,希望能幫到你
⑵ 求助,如何抓取百度貼吧樓層中的回復Python
打開一個帖子,按F12,在控制台里輸入 $('cc div')
可以看看這篇文章:http://webmagic.io/docs/zh/posts/chx-cases/js-render-page.html
⑶ python如何抓取滑鼠點擊事件,並返回點擊所在坐標(Xlib庫)
我用的是import pyHook模塊
import pythoncom
import pyHook
def onMouseEvent(event):
print "Position:", event.Position
return True
def main():
hm = pyHook.HookManager()
hm.HookKeyboard()
hm.MouseAll = onMouseEvent
hm.HookMouse()
pythoncom.PumpMessages()
if __name__ == "__main__":
main()
⑷ 濡備綍鎶撳彇緗戦〉涓婄殑鏁版嵁(濡備綍浣跨敤Python榪涜岀綉欏墊暟鎹鎶撳彇)
鍦ㄥ綋浠婁俊鎮鐖嗙偢鐨勬椂浠o紝緗戦〉涓婅暣鈃忕潃澶ч噺鐨勬暟鎹錛屽逛簬璁稿氶嗗煙鐨勭爺絀跺拰搴旂敤鏉ヨ達紝鑾峰彇緗戦〉涓婄殑鏁版嵁鏄闈炲父閲嶈佺殑銆侾ython浣滀負涓縐嶇畝鍗曟槗瀛︿笖鍔熻兘寮哄ぇ鐨勭紪紼嬭璦錛岃騫挎硾搴旂敤浜庣綉欏墊暟鎹鎶撳彇銆傛湰鏂囧皢浠嬬粛濡備綍浣跨敤Python榪涜岀綉欏墊暟鎹鎶撳彇鐨勬搷浣滄ラゃ
涓銆佸畨瑁匬ython鍜岀浉鍏沖簱
瑕佷嬌鐢≒ython榪涜岀綉欏墊暟鎹鎶撳彇錛岄栧厛闇瑕佸畨瑁匬ython瑙i噴鍣ㄣ傚彲浠ヤ粠Python瀹樻柟緗戠珯涓嬭澆騫跺畨瑁呮渶鏂扮殑Python鐗堟湰銆傚畨瑁呭畬鎴愬悗錛岃繕闇瑕佸畨瑁呬竴浜涚浉鍏崇殑Python搴擄紝濡俽equests銆乥eautifulsoup銆乻elenium絳夈傚彲浠ヤ嬌鐢╬ip鍛戒護鏉ュ畨瑁呰繖浜涘簱錛屼緥濡傚湪鍛戒護琛屼腑杈撳叆浠ヤ笅鍛戒護鏉ュ畨瑁卹equests搴擄細
```
pipinstallrequests
```
浜屻佷嬌鐢╮equests搴撹幏鍙栫綉欏靛唴瀹
requests鏄涓涓鍔熻兘寮哄ぇ涓旀槗浜庝嬌鐢ㄧ殑HTTP搴擄紝鍙浠ョ敤鏉ュ彂閫丠TTP璇鋒眰騫惰幏鍙栫綉欏靛唴瀹廣備笅闈㈡槸涓涓浣跨敤requests搴撹幏鍙栫綉欏靛唴瀹圭殑紺轟緥浠g爜錛
```python
importrequests
url="https://www.example.com"
response=requests.get(url)
html=response.text
print(html)
```
鍦ㄨ繖涓紺轟緥涓錛屾垜浠棣栧厛瀵煎叆浜唕equests搴擄紝鐒跺悗鎸囧畾浜嗚佽幏鍙栫殑緗戦〉URL銆備嬌鐢╮equests.get()鏂規硶鍙戦丟ET璇鋒眰錛屽苟灝嗚繑鍥炵殑鍝嶅簲瀵硅薄璧嬪肩粰response鍙橀噺銆傛渶鍚庯紝閫氳繃response.text灞炴ц幏鍙栫綉欏電殑鍐呭癸紝騫舵墦鍗拌緭鍑恆
涓夈佷嬌鐢╞eautifulsoup搴撹В鏋愮綉欏靛唴瀹
beautifulsoup鏄涓涓鐢ㄤ簬瑙f瀽HTML鍜孹ML鏂囨。鐨凱ython搴擄紝鍙浠ユ柟渚垮湴浠庣綉欏典腑鎻愬彇鎵闇鐨勬暟鎹銆備笅闈㈡槸涓涓浣跨敤beautifulsoup搴撹В鏋愮綉欏靛唴瀹圭殑紺轟緥浠g爜錛
```python
frombs4importBeautifulSoup
soup=BeautifulSoup(html,"html.parser")
title=soup.title.text
print(title)
```
鍦ㄨ繖涓紺轟緥涓錛屾垜浠棣栧厛瀵煎叆浜咮eautifulSoup綾伙紝鐒跺悗灝嗕箣鍓嶈幏鍙栧埌鐨勭綉欏靛唴瀹筯tml浣滀負鍙傛暟浼犻掔粰BeautifulSoup綾葷殑鏋勯犲嚱鏁幫紝鍒涘緩涓涓狟eautifulSoup瀵硅薄soup銆傞氳繃soup.title.text灞炴у彲浠ヨ幏鍙栫綉欏電殑鏍囬橈紝騫舵墦鍗拌緭鍑恆
鍥涖佷嬌鐢╯elenium搴撴ā鎷熸祻瑙堝櫒琛屼負
selenium鏄涓涓鑷鍔ㄥ寲嫻嬭瘯宸ュ叿錛屼篃鍙浠ョ敤鏉ユā鎷熸祻瑙堝櫒琛屼負榪涜岀綉欏墊暟鎹鎶撳彇銆備嬌鐢╯elenium搴撳彲浠ユ墽琛孞avaScript浠g爜銆佹ā鎷熺偣鍑繪寜閽銆佸~鍐欒〃鍗曠瓑鎿嶄綔銆備笅闈㈡槸涓涓浣跨敤selenium搴撴ā鎷熸祻瑙堝櫒琛屼負鐨勭ず渚嬩唬鐮侊細
```python
fromseleniumimportwebdriver
driver=webdriver.Chrome()
driver.get(url)
button=driver.find_element_by_xpath("//button[@id='btn']")
button.click()
```
鍦ㄨ繖涓紺轟緥涓錛屾垜浠棣栧厛瀵煎叆浜唚ebdriver綾伙紝鐒跺悗鍒涘緩涓涓狢hrome嫻忚堝櫒瀵硅薄driver銆傞氳繃driver.get()鏂規硶鎵撳紑鎸囧畾鐨勭綉欏點傛帴涓嬫潵錛屼嬌鐢╠river.find_element_by_xpath()鏂規硶鎵懼埌欏甸潰涓婄殑鎸夐挳鍏冪礌錛屽苟浣跨敤click()鏂規硶妯℃嫙鐐瑰嚮鎸夐挳鐨勬搷浣溿
浜斻佸叾浠栧父鐢ㄧ殑緗戦〉鏁版嵁鎶撳彇鎶宸
闄や簡涓婅堪浠嬬粛鐨勫熀鏈鎿嶄綔澶栵紝榪樻湁涓浜涘父鐢ㄧ殑緗戦〉鏁版嵁鎶撳彇鎶宸у彲浠ユ彁楂樻姄鍙栨晥鐜囧拰鍑嗙『鎬с備緥濡傦紝鍙浠ヤ嬌鐢ㄦe垯琛ㄨ揪寮忔潵鍖歸厤鍜屾彁鍙栫壒瀹氭牸寮忕殑鏁版嵁錛涘彲浠ヤ嬌鐢ㄤ唬鐞嗘湇鍔″櫒鏉ラ殣鈃廔P鍦板潃鍜屾彁楂樿塊棶閫熷害錛涘彲浠ヤ嬌鐢ㄥ氱嚎紼嬫垨寮傛IO鏉ュ苟鍙戞姄鍙栧氫釜緗戦〉絳夈
⑸ python可以做到自動抓取互聯網上的新聞更新到網站嗎
理論上完全可以實現,相應的技術方案也是比較成熟的。不知道需要爬取的網站內容復雜不復雜的。目前我想到的方案是藉助爬蟲框架,數據存儲可利用mysql,mongodb之類的。打個比方,這是我用scrapy爬取詩詞網站的數據,臘純然後存儲到Mongodb中,就是缺少一部更新。
我們可以設定一個任務,任務可以是每1分鍾更新一下爬取數據,這樣就可以做到對應網站數據的更新,至於自身網站數據的更新,因為是客戶端發起的,所以,只要做到伺服器商數汪帶據更新了,客戶端就可以看到最新的數據,當然,需要注意相應的緩存技術的影響。
總的來說,爬取網站的數據然後更新到網站,是完全可以實現的。主要是看出於什麼的目的,以及爬輪陵咐取的網站的復雜性問題。
⑹ 如何利用Python抓取靜態網站及其內部資源
這個非常閉冊塌簡單,requests+BeautifulSoup組合就可以輕松實現,下轎圓面我簡單介紹一下,感興趣的朋友可以自己嘗試一下,這里以爬取糗事網路網站數據(靜態網站)為例:
1.首先,安裝requets模塊,這個直接在cmd窗口輸入命令「pipinstallrequests」就行,如下:
2.接著安裝bs4模塊,這個模塊包含了BeautifulSoup,安裝的話,和requests一樣,直接輸入安裝命令「pipinstallbs4」即可,如下:
3.最後就是requests+BeautifulSoup組合爬取糗事網路,requests用於請求頁面,BeautifulSoup用於解析頁面,提取數據,主要步驟及截圖如下:
這里假設爬取的數據包含如下幾個欄位,包括用戶昵稱、內容、好笑數和評論數:
接著打開對應網頁源碼,就可以直接看到欄位信息,內容如下,嵌套在各個標簽中,後面就是解析這些標簽提取數據:基於上面網頁內容,測試代碼如下,非常簡單,直接find對應標簽,提取文本內容即可:
程序運行截圖如下,已經成功抓取到網站數據:
至此,我們就完成了使用python來爬去靜態網站。總的來說,整個過程非常簡單,也是最基本的爬蟲內容,只要你有一定的python基礎,熟悉一下上面的示例,很快就能掌握的,當然,你也可以使用urllib,正則表達式匹配等,都行,網上也有相關教程和資料,介紹的非常詳細,感興趣的話,可以姿段搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
⑺ 怎麼用python抓取網頁並實現一些提交操作
首先我們找到登錄的元素,在輸入賬號處選中–>右鍵–>檢查
然後直接查詢網頁源代碼去找到上面的部分,根據標簽來觀察提交的表單參數,這里強調一下:
form標簽和form標簽下的input標簽非常重要,form標簽中的action屬性代表請求的URL,input標簽下的name屬性代表提交參數的KEY。
代碼參考如下:
import requests
url="網址" #action屬性
params={
"source":"index_nav", #input標簽下的name
"form_email":"xxxxxx", #input標簽下的name
"form_password":"xxxxxx" #input標簽下的name
}
html=requests.post(url,data=params)
print(html.text)
運行後發現已登錄賬號,相當於一個提交登陸的操作
⑻ Python豆瓣電影《肖申克的救贖》評論爬取
先看效果圖:
地址:( https://movie.douban.com/subject/1292052/comments?sort=time&status=P)
爬取前1w條評論
存儲成txt文檔
數據預處告攜理
中文分詞
統計top10的高頻詞
可視化展示高頻詞
根據詞頻生成詞雲
審核評論
================================================================
配置准備
中文分詞需要jieba
詞雲繪制需要wordcloud
可視化展示中需要的中文字體
網上公開資源中找一個中咐桐文停用詞表
根據分詞結果自己製作新增詞襪簡伏表
准備一張詞雲背景圖(附加項,不做要求)
paddlehub配置
#安裝jieba分詞和詞雲
pip install jieba
pip install wordcloud
#安裝paddle
pip install --upgrade PaddlePaddle
#安裝模型
#hub install porn_detection_lstm==1.1.0
pip install --upgrade paddlehub
pip install numpy
#安裝Beautifulsoup
pip install BeautifulSoup4
Github地址: https://github.com/mikite/python_sp_shawshank
有可能遇到的問題:
1.UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 1: invalid continuation byte
解決方法:
1.不使用urlLib換做requests
2.去掉請求頭中的 'Accept-Encoding': 'gzip, deflate, br'
3.返回值reponse 轉字元串指定編碼utf-8
# 'Accept-Encoding': 'gzip, deflate, br',
2.關於cookie
解決方法:
1.去豆瓣請求頭中復制cookie設置到請求頭中
'Cookie': 'bid=WD6_t6hVqgM'
3.請求返回418的問題
解決方案模擬設置請求頭,設置user-agent
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
4.使用beautifulsoup獲取不到評論
解決方法:
第一步:指定解析參數為'lxml'
soupComment = BeautifulSoup(html, 'lxml')
第二步:
findAll方法指定css文件的class名
print('網頁內容:', soupComment.prettify())
comments = soupComment.findAll(class_='short')
點擊獲取源碼
⑼ python爬蟲是幹嘛的
爬蟲技術是一種自動化程序。
爬蟲就是一種可以從網頁上抓取數據信息並保存的自動化程序,它的原理就是模擬瀏覽器發送網路請求,接受請求響應,然後按照一定的規則自動抓取互聯網數據。
搜索引擎通過這些爬蟲從一個網站爬到另一個網站,跟蹤網頁中的鏈接,訪問更多的網頁,這個過程稱為爬行,這些新的網址會被存入資料庫等待搜索。簡而言之,爬蟲就是通過不間斷地訪問互聯網,然後從中獲取你指定的信息並返回給你。而我們的互聯網上,隨時都有無數的爬蟲在爬取數據,並返回給使用者。
爬蟲技術的功能
1、獲取網頁
獲取網頁可以簡單理解為向網頁的伺服器發送網路請求,然後伺服器返回給我們網頁的源代碼,其中通信的底層原理較為復雜,而Python給我們封裝好了urllib庫和requests庫等,這些庫可以讓我們非常簡單的發送各種形式的請求。
2、提取信息
獲取到的網頁源碼內包含了很多信息,想要進提取到我們需要的信息,則需要對源碼還要做進一步篩選。可以選用python中的re庫即通過正則匹配的形式去提取信息,也可以採用BeautifulSoup庫(bs4)等解析源代碼,除了有自動編碼的優勢之外,bs4庫還可以結構化輸出源代碼信息,更易於理解與使用。
3、保存數據
提取到我們需要的有用信息後,需要在Python中把它們保存下來。可以使用通過內置函數open保存為文本數據,也可以用第三方庫保存為其它形式的數據,例如可以通過pandas庫保存為常見的xlsx數據,如果有圖片等非結構化數據還可以通過pymongo庫保存至非結構化資料庫中。