python基礎(chǔ)回顧-簡易爬蟲【五】

1:頁面數(shù)據(jù)采集:urllib

from urllib import request

#定義
url ='http://www.baidu.com'
#打開url 設(shè)置超時(shí)鏈接1s   
response = request.urlopen(url,timeout=1)
#輸出  讀取response 并以utf-8 輸出  相應(yīng)的編碼解壓(中文):其實(shí)就是查看源代碼
print (response.read().decode('utf-8'))

2.get與post

from urllib import parse
from urllib import request
#parse處理數(shù)據(jù)
#傳遞給url的值
data = bytes(parse.urlencode({'word':'hello'}),encoding='utf8')
#print(data)

response = request.urlopen('http://httpbin.org/post', data=data)
print(response.read().decode('utf-8'))


response2 = request.urlopen('http://httpbin.org/get', timeout=1)
print(response2.read())


# response3 = request.urlopen('http://httpbin.org/get', timeout=0.1)

import urllib
import socket


try:
    response3 = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
except urllib.error.URLError as e:
    #套接字鏈接超時(shí)
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')

3:http頭部信息模擬:

from urllib import request, parse

url = 'http://httpbin.org/post'

headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "zh-CN,zh;q=0.8",
"Connection": "close",
"Cookie": "_gauges_unique_hour=1; _gauges_unique_day=1; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1",
"Referer": "http://httpbin.org/",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER"
}

dict = {
'name': 'value'
}

data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

4:requests庫的請求

# get請求
import requests
url = 'http://httpbin.org/get'
data = {'key': 'value', 'abc': 'xyz'}
# .get是使用get方式請求url惨好,字典類型的data不用進(jìn)行額外處理
response = requests.get(url, data)
#print(response.text)


# post請求
import requests
url = 'http://httpbin.org/post'
data = {'key': 'value', 'abc': 'xyz'}
# .post表示為post方法
response = requests.post(url, data)
# 返回類型為json格式
print(response.json())

5:爬個(gè)頁面獲取鏈接

import requests
import re
content = requests.get('http://www.cnu.cc/discoveryPage/hot-人像').text

#print(content)


# < div class ="grid-item work-thumbnail" >
# < a href="(.*?)".*?title">(.*?)</div>
# < div class ="author" > LynnWei < / div >
#.*?這三個(gè)組合在一起的含義就是 :0個(gè)或者任意個(gè)不是\n的任意字符(非貪婪模式,發(fā)現(xiàn)一個(gè)就立即匹配結(jié)束)
#re.S如果不使用re.S參數(shù),則只在每一行內(nèi)進(jìn)行匹配俺猿,如果一行沒有颅眶,就換下一行重新開始,不會(huì)跨行。而使用re.S參數(shù)以后镀脂,正則表達(dá)式會(huì)將這個(gè)字符串作為一個(gè)整體苍碟,
# #將“\n”當(dāng)做一個(gè)普通的字符加入到這個(gè)字符串中酒觅,在整體中進(jìn)行匹配
pattern = re.compile(r'<a href="(.*?)".*?title">(.*?)</div>', re.S)
#print(pattern)
#正則 re.findall  的簡單用法(返回string中所有與pattern相匹配的全部字串,返回形式為數(shù)組
results = re.findall(pattern, content)
print(results)


for result in results:
    url, name = result
    #/s 替換成空白
    print(url, re.sub('\s', '', name))
image.png

6.BeautifulSoup匹配html中的標(biāo)簽以及文本信息

#導(dǎo)入字符串html
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a  class="sister" id="link1">Elsie</a>,
<a  class="sister" id="link2">Lacie</a> and
<a  class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

from bs4 import BeautifulSoup
#安裝lxml  功能:查找標(biāo)簽并且獲取里面內(nèi)容(第一個(gè)標(biāo)簽/所有標(biāo)簽)
soup = BeautifulSoup(html_doc, 'lxml')

#print(soup.prettify())

#
# # 找到title標(biāo)簽
print(soup.title)
#
# # title 標(biāo)簽里的內(nèi)容
print(soup.title.string)


# # 找到p標(biāo)簽
print(soup.p)
#
# # 找到p標(biāo)簽class的名字
# print(soup.p['class'])
#
# # 找到第一個(gè)a標(biāo)簽
# print(soup.a)
#
# # 找到所有的a標(biāo)簽
# print(soup.find_all('a'))
#
#
# # 找到id為link3的的標(biāo)簽
print(soup.find(id="link3"))
#
# # 找到所有<a>標(biāo)簽的鏈接
# for link in soup.find_all('a'):
#     print(link.get('href'))
#
# # 找到文檔中所有的文本內(nèi)容
#print(soup.get_text())

7.爬取一個(gè)新聞網(wǎng)站:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末微峰,一起剝皮案震驚了整個(gè)濱河市舷丹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜓肆,老刑警劉巖颜凯,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谋币,死亡現(xiàn)場離奇詭異,居然都是意外死亡症概,警方通過查閱死者的電腦和手機(jī)蕾额,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彼城,“玉大人诅蝶,你說我怎么就攤上這事∧己荆” “怎么了调炬?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舱馅。 經(jīng)常有香客問我缰泡,道長,這世上最難降的妖魔是什么代嗤? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任棘钞,我火速辦了婚禮,結(jié)果婚禮上资溃,老公的妹妹穿的比我還像新娘武翎。我一直安慰自己,他們只是感情好溶锭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布宝恶。 她就那樣靜靜地躺著,像睡著了一般趴捅。 火紅的嫁衣襯著肌膚如雪垫毙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天拱绑,我揣著相機(jī)與錄音综芥,去河邊找鬼。 笑死猎拨,一個(gè)胖子當(dāng)著我的面吹牛膀藐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播红省,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼额各,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吧恃?” 一聲冷哼從身側(cè)響起虾啦,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后傲醉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝇闭,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年硬毕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呻引。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昭殉,死狀恐怖苞七,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挪丢,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布卢厂,位于F島的核電站乾蓬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏慎恒。R本人自食惡果不足惜任内,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望融柬。 院中可真熱鬧死嗦,春花似錦、人聲如沸粒氧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外盯。三九已至摘盆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饱苟,已是汗流浹背孩擂。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箱熬,地道東北人类垦。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像城须,于是被迫代替她去往敵國和親蚤认。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容