python爬贴吧回复内容_Python 基础语法+简单地爬取百度贴吧内容
Python筆記
1、Python3和Pycharm2018的安裝
2、Python3基礎語法
2.1.1、數據類型
2.1.1.1、數據類型:數字(整數和浮點數)
整數:int類型
浮點數:float類型。
2.1.1.2、數據類型:字符類型
2.1.1.3、數據類型:布爾類型
True:真
Flase:假
2.1.1.3、數據類型:列表(list)
>>> l =['aaa','bbb','ccc']
>>> l[0]
'aaa'
>>> l.append('ddd') # 追加元素
>>> l
['aaa', 'bbb', 'ccc', 'ddd']
>>> l.pop() #數組尾部移除元素
'ddd'
>>> l
['aaa', 'bbb', 'ccc']
>>> l.pop(1) #指定索引位置移除元素
'bbb'
>>> l
['aaa', 'ccc']
>>>
2.1.1.4、數據類型:元組(tuple)
元組和list類似,但是它是不能修改
2.1.1.5、數據類型:字典(dictionary)
類似java的map
>>> m = {'name':'test1','age':18}
>>> m
{'name': 'test1', 'age': 18}
>>> m['name']
'test1'
>>> m['name']='test2'
>>> m
{'name': 'test2', 'age': 18}
>>> m[name] # 如果鍵不存在報錯
Traceback (most recent call last):
File "", line 1, in
m[name]
NameError: name 'name' is not defined
>>>
2.1.1.6、數據類型:集合(set)
set和dict類似,也是一組key的集合,但不存儲value,key不能重復.
>>> s = set([1,2,3])
>>> s
{1, 2, 3}
>>> list = list(s) # 將set類型轉換為list類型
>>> list
[1, 2, 3]
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.remove(2)
>>> s
{1, 3, 4}
>>>
2.1.1.7、數據類型:None
類似于java的null
2.1.2、變量
python的變量是動態語言,java是靜態語言。
// java
int a=1; //a的數字是int類型
a="abc"; //報錯
a=1 //當前a的數據類型是整數
a=1.0 //浮點型
a='abc' //字符型
常量
python習慣性以大寫定義變量,認為是一個常量,但是python中沒有辦法去約束你不可以修改這個值。
變量:不可變和可變
python3里的6個基本數據類型:
不可變數據(3個):數字、字符串類型、元組
可變數據(3個):數組、字典、集合
>>> a='abc'
>>> b=a
>>> a='123'
>>> a
'123'
>>> b
'abc'
2.1.3、運算符
2.1.3.1、算術運算符
+、-、*、/、%
>>> 7/2
3.5
>>> 6/2
3.0
>>> 7//2
3
>>> 7%2
1
>>> 7.0/2
3.5
>>> 7.0//2 #取整的值取決于相除的2方
3.0
>>> 5 ** 2 # 用** 表示計算冪乘方
25
>>> a='123'
>>> b = a*3 # 將a的值復制3次
>>> b
'123123123'
>>>
2.1.3.2、關系運算符
2.1.3.3、賦值運算符
2.1.3.4、邏輯運算符
and:且
or:或
not:取反
2.1.3.5、位運算符
2.1.3.6、成員運算符
>>> list = [1,2,3,4,5]
>>> a=2
>>> a in list # 判斷a是否在指定序列中
True
>>> b=10
>>> b in list
False
>>> b not in list # 使用not in 判斷是否不在指定的序列中
True
2.1.4、流程語句
2.1.4.1、條件判斷
if 5>3:
print(1)
elif 5>7:
print(2)
#... elif可以寫0到多個
else: # else也可以省略
#code
2.1.4.2、循環
>>> a =1
>>> while a<=10:
print(a)
a++ # python不支持
SyntaxError: invalid syntax
>>> while a<=10:
print(a)
a+=1
1
2
3
4
5
6
7
8
9
10
>>> for n in range(5):
print(n)
0
1
2
3
4
>>> for n in range(1,10):
print(n)
1
2
3
4
5
6
7
8
9
3、爬百度貼吧
1、獲取第一頁的html
from urllib import request, parse
# 獲取每一頁的html
def loadPage(url):
# 1、創建連接對象
req = request.Request(url)
# 2、創建連接并獲得響應對象
response = request.urlopen(req)
# 3、讀取響應的內容
html = response.read()
print(type(html)) # bytes類型的數字,不是str
print('html:', html)
# 4、將讀取的內容解碼
content = html.decode('utf-8')
print('content:', content)
if __name__ == '__main__':
url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E6%9D%8E%E6%AF%85'
loadPage(url)
2、將下載的內容寫入到文件中
from urllib import request, parse
# 獲取每一頁的html
def loadPage(url):
# 1、創建連接對象
req = request.Request(url)
# 2、創建連接并獲得響應對象
response = request.urlopen(req)
# 3、讀取響應的內容
html = response.read()
print(type(html)) # bytes類型的數字,不是str
print('html:', html)
# 4、將讀取的內容解碼
content = html.decode('utf-8')
print('content:', content)
return content
# 將下載的內容寫入到文件中
def writeFile(html, filename):
print('正在保存:' + filename)
f = open(filename, 'w', encoding='utf-8') # open()用來讀或寫文件:讀:mode='r',寫:mode='w'
f.write(html)
f.close()
if __name__ == '__main__':
# 獲取每一頁的html
url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E6%9D%8E%E6%AF%85'
content = loadPage(url)
# 將下載的內容寫入到文件中
filename = 'D:/course/tmp/test1.html'
writeFile(content, filename)
print('程序結束...')
3、設置起始頁和終止頁
int():將str轉換為int類型
float():將str轉換為float類型
str():將轉換為str字符串類型
from urllib import request, parse
# 獲取每一頁的html
def loadPage(url):
# 1、創建連接對象
req = request.Request(url)
# 2、創建連接并獲得響應對象
response = request.urlopen(req)
# 3、讀取響應的內容
html = response.read()
print(type(html)) # bytes類型的數字,不是str
print('html:', html)
# 4、將讀取的內容解碼
content = html.decode('utf-8')
print('content:', content)
return content
# 將下載的內容寫入到文件中
def writeFile(html, filename):
print('正在保存:' + filename)
f = open(filename, 'w', encoding='utf-8') # open()用來讀或寫文件:讀:mode='r',寫:mode='w'
f.write(html)
f.close()
# 設置起始頁和終止頁
def tiebaSpider(url, beginPage, endPage):
for page in range(beginPage, endPage+1):
pn = (page-1) * 50 # 設置pn的值
new_url = url + '&pn=' + str(pn) # 生成新的url
# print('new_url: ', new_url)
print('new_url %s' % new_url)
# print('new_url %s, %s' %(new_url, new_url))
filename = '第'+str(page)+'頁.html' # 生成下載要保存的文件名
html = loadPage(new_url) # 獲得下載頁面的內容
writeFile(html, filename) # 寫入文件
if __name__ == '__main__':
# 獲取每一頁的html
url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E6%9D%8E%E6%AF%85'
beginPage = int(input('請輸入起始頁:')) # 輸入默認的是str類型
endPage = int(input('請輸入終止頁:'))
print('beginPage: %d , endPage:%d' %(beginPage, endPage))
tiebaSpider(url, beginPage, endPage)
print('程序結束...')
4、爬取貼吧圖片
4.1、先要獲得下載圖片的鏈接地址
# 獲得圖片的鏈接地址
def loadPage2(url):
# 創建連接對象
req = request.Request(url)
# 創建url連接獲得響應對象
response = request.urlopen(req)
# 讀取網頁的內容
html = response.read()
# 對內容解碼
html = html.decode('utf-8')
# 對內容創建dom樹對象
content = etree.HTML(html)
print(type(content)) #
# 通過 xpath規則獲取滿足條件的數據
link_list = content.xpath('//div[@id="post_content_102822382749"]/img/@src')
# link_list = content.xpath('//div[@id="post_content_102822382749"]/a/text()')
for link in link_list:
print(link) # 圖片的鏈接地址
if __name__ == '__main__':
url = 'https://tieba.baidu.com/p/4946204416'
loadPage2(url)
4.2、將圖片下載到本地保存
from urllib import request, parse
from lxml import etree
# 獲取每一頁的html
def loadPage(url):
# 1、創建連接對象
req = request.Request(url)
# 2、創建連接并獲得響應對象
response = request.urlopen(req)
# 3、讀取響應的內容
html = response.read()
print(type(html)) # bytes類型的數字,不是str
print('html:', html) # 內容本身就是圖片的內容,圖片的內容由二進制組成,不需要解碼
return html
# 獲得圖片的鏈接地址
def loadPage2(url):
# 創建連接對象
req = request.Request(url)
# 創建url連接獲得響應對象
response = request.urlopen(req)
# 讀取網頁的內容
html = response.read()
# 對內容解碼
html = html.decode('utf-8')
# 對內容創建dom樹對象
content = etree.HTML(html)
print(type(content)) #
# 通過 xpath規則獲取滿足條件的數據
link_list = content.xpath('//div[@id="post_content_102822382749"]/img/@src')
# link_list = content.xpath('//div[@id="post_content_102822382749"]/a/text()')
for link in link_list:
print(link) # 圖片的鏈接地址
filename = link[-20:]
print('正在保存文件:' + filename)
# 將圖片寫入到文件中
# mode='w':寫的數據類型是str
# 寫入二進制內容需要設置mode='wb',并且不需要設置encoding='utf-8'
# 使用with就不需要 手動f.close()
with open('D:/course/tmp/'+filename, 'wb') as f:
html1 = loadPage(link)
f.write(html1)
# f = open('D:/course/tmp/'+, 'w', encoding='utf-8') # open()用來讀或寫文件:讀:mode='r',寫:mode='w'
# f.write(html)
# f.close()
if __name__ == '__main__':
url = 'https://tieba.baidu.com/p/4946204416'
loadPage2(url)
總結
以上是生活随笔為你收集整理的python爬贴吧回复内容_Python 基础语法+简单地爬取百度贴吧内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程----BlockingQueue
- 下一篇: 大学python搜题app_2021年中