日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫基础, 乱码问题, jupyter, urllib, requests, lxml, multiprocessing并发, session, beautifulsoup...

發布時間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫基础, 乱码问题, jupyter, urllib, requests, lxml, multiprocessing并发, session, beautifulsoup... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

碰到亂碼時解決方法

requests.get().text是根據HTML文件的headers中的編碼來解碼的, 出現亂碼需要自己用content來獲取信息然后解碼

res = res.encode('iso-8859-1').decode('gbk') # 不知道用什么解碼時, 就用這個, 一般html的header中有charset html = r.content html = str(html,'utf-8') #html_doc=html.decode("utf-8","ignore")r = requests.get("http://www.baidu.com") r.encoding='utf-8' html=r.text

方法二(如果還是不行, 用這方法):

# -*-coding:utf8-*-import requestsreq = requests.get("http://news.sina.com.cn/")if req.encoding == 'ISO-8859-1':encodings = requests.utils.get_encodings_from_content(req.text)if encodings:encoding = encodings[0]else:encoding = req.apparent_encoding# encode_content = req.content.decode(encoding, 'replace').encode('utf-8', 'replace')global encode_contentencode_content = req.content.decode(encoding, 'replace') #如果設置為replace,則會用?取代非法字符;print(encode_content)with open('test.html','w',encoding='utf-8') as f:f.write(encode_content) --------------------- 作者:chaowanghn 來源:CSDN 原文:https://blog.csdn.net/chaowanghn/article/details/54889835 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

?

Jupyter快捷鍵

  • 插入cell: a b
  • 刪除: x
  • 執行:shift+enter
  • tab:
  • cell模式切換: y(m->code) m(code->m)
  • shift+tab:打開幫助文檔

爬蟲的分類:

  • 通用爬蟲:
  • 聚焦爬蟲:
  • 增量式:

?

不需要with open寫入文件的寫法: urllib

import urllib urllib.request.urlretrieve(url, 'a.jpg') View Code

?

requests.get?requests.post

# get
for i in range(5):
param = {
'type': 'tv',
'tag':'熱門',
'sort': 'recommend',
'page_limit': 20,
'page_start': i,
}
cont = requests.get(url, params=param).json()
print(cont)

# post
url = 'https://fanyi.baidu.com/sug'
wd = input('enter a word:')
data = {
'kw':wd
}
response = requests.post(url=url,data=data)

?

headers字典

headers = {'Connection':'close', #當請求成功后,馬上斷開該次請求(及時釋放請求池中的資源)'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' }

?

獲取requests爬取結果

content = requests.get(url, params=param) a = content.text # 字符串 b = content.content # b'' c = content.json() # json格式

?

etree

有的時候找不到href對應的位置, 可以在返回的內容里面搜一下 .mp4 或者其他格式, 還可以搜一下自己按了鏈接點出來的href, 還有js里面也可能有

from lxml import etree import requests import base64 import randomtext = requests.get(url, headers).text # 獲取網頁文本信息 tree = etree.HTML(text) # etree的實例化 lis = tree.xpath('/html/body/div[5]/div[5]/div[1]/ul/li') # xpath解析 for el in lis:a = el.xpath('./div[2]/h2/a/text()') # 第二次解析時, 要在/div前加個. 否則會從html的最開始解析, 在不加text()時, 輸出一個列表, 可以用[0]來獲取a = el.xpath('./div[3]//text()')print(a)
for el in lis:a = el.xpath('./a/img/@src')[0] # xpath是個列表, 要用[0]來獲取元素print(a)


res = requests.get(url, headers)
res
= res.text
res = res.encode(
'iso-8859-1').decode('gbk') # 不知道用什么解碼時, 就用這個, 一般html的header中有charset


# 在一個網頁的etree中, 獲取適合多個解析式的內容
li_list = tree.xpath('//div[@class="bottom"]/ul/li |? //div[@class="bottom"]/ul/div[2]/li')

# 下載文件 data = requests.get(url=download_url,headers=headers).contentfileName = name+'.rar'with open(fileName,'wb') as fp:fp.write(data)

?

并發

from multiprocessing.dummy import Pool pool = Pool(5) pool.map(getvideo, lst)

?

二維碼識別

用云打碼識別

import http.client, mimetypes, urllib, json, time, requests######################################################################class YDMHttp:apiurl = 'http://api.yundama.com/api.php'username = ''password = ''appid = ''appkey = ''def __init__(self, username, password, appid, appkey):self.username = username self.password = passwordself.appid = str(appid)self.appkey = appkeydef request(self, fields, files=[]):response = self.post_url(self.apiurl, fields, files)response = json.loads(response)return responsedef balance(self):data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}response = self.request(data)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['balance']else:return -9001def login(self):data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}response = self.request(data)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['uid']else:return -9001def upload(self, filename, codetype, timeout):data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}file = {'file': filename}response = self.request(data, file)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['cid']else:return -9001def result(self, cid):data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'cid': str(cid)}response = self.request(data)return response and response['text'] or ''def decode(self, filename, codetype, timeout):cid = self.upload(filename, codetype, timeout)if (cid > 0):for i in range(0, timeout):result = self.result(cid)if (result != ''):return cid, resultelse:time.sleep(1)return -3003, ''else:return cid, ''def report(self, cid):data = {'method': 'report', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'cid': str(cid), 'flag': '0'}response = self.request(data)if (response):return response['ret']else:return -9001def post_url(self, url, fields, files=[]):for key in files:files[key] = open(files[key], 'rb');res = requests.post(url, files=files, data=fields)return res.text####################################################################### 用戶名 username = 'username'# 密碼 password = 'password' # 軟件ID,開發者分成必要參數。登錄開發者后臺【我的軟件】獲得! appid = 1 # 軟件密鑰,開發者分成必要參數。登錄開發者后臺【我的軟件】獲得! appkey = '22cc5376925e9387a23cf797cb9ba745' # 圖片文件 filename = 'getimage.jpg' # 驗證碼類型,# 例:1004表示4位字母數字,不同類型收費不同。請準確填寫,否則影響識別率。在此查詢所有類型 http://www.yundama.com/price.html codetype = 1004# 超時時間,秒 timeout = 60 # 檢查 if (username == 'username'):print('請設置好相關參數再測試') else:# 初始化yundama = YDMHttp(username, password, appid, appkey)# 登陸云打碼uid = yundama.login();print('uid: %s' % uid)# 查詢余額balance = yundama.balance();print('balance: %s' % balance)# 開始識別,圖片路徑,驗證碼類型ID,超時時間(秒),識別結果cid, result = yundama.decode(filename, codetype, timeout);print('cid: %s, result: %s' % (cid, result))###################################################################### View Code

?

session

session = requests.Session() session.get(url, params) session.post(login_url, data, headers) 和requests發請求相比, session會更耗內存, 但是session可以存儲接收到的cookie

?

BeautifulSoup

soup = BeautifulSoup(content, 'lxml')a_list = soup.select('.book-mulu > ul > li > a') # 選擇標簽 list內部是soup對象

text = soup.find('div',class_='chapter_content').text # 獲取子類和子類的子類...的text
使用流程: - 導包:from bs4 import BeautifulSoup- 使用方式:可以將一個html文檔,轉化為BeautifulSoup對象,然后通過對象的方法或者屬性去查找指定的節點內容(1)轉化本地文件:- soup = BeautifulSoup(open('本地文件'), 'lxml')(2)轉化網絡文件:- soup = BeautifulSoup('字符串類型或者字節類型', 'lxml')(3)打印soup對象顯示內容為html文件中的內容方法:(1)根據標簽名查找- soup.a 只能找到第一個符合要求的標簽(2)獲取屬性- soup.a.attrs 獲取a所有的屬性和屬性值,返回一個字典- soup.a.attrs['href'] 獲取href屬性- soup.a['href'] 也可簡寫為這種形式(3)獲取內容- soup.a.string- soup.a.text- soup.a.get_text()【注意】如果標簽還有標簽,那么string獲取到的結果為None,而其它兩個,可以獲取文本內容(4)find:找到第一個符合要求的標簽- soup.find('a') 找到第一個符合要求的- soup.find('a', title="xxx").text- soup.find('a', alt="xxx").content- soup.find('a', class_="xxx")- soup.find('a', id="xxx")(5)find_all:找到所有符合要求的標簽- soup.find_all('a')- soup.find_all(['a','b']) 找到所有的a和b標簽- soup.find_all('a', limit=2) 限制前兩個(6)根據選擇器選擇指定的內容select:soup.select('#feng')- 常見的選擇器:標簽選擇器(a)、類選擇器(.)、id選擇器(#)、層級選擇器- 層級選擇器:div .dudu #lala .meme .xixi 下面好多級div > p > a > .lala 只能是下面一級【注意】select選擇器返回永遠是列表,需要通過下標提取指定的對象

?

轉載于:https://www.cnblogs.com/NachoLau/p/10440198.html

總結

以上是生活随笔為你收集整理的爬虫基础, 乱码问题, jupyter, urllib, requests, lxml, multiprocessing并发, session, beautifulsoup...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美在线va| 亚洲一区免费看 | av资源一区 | 自拍视频一区二区 | 亚洲AV无码成人精品区明星换面 | 小镇姑娘1979版 | 99久| 国产高清色 | 熟妇人妻无乱码中文字幕真矢织江 | 久久性av | 精品一区二区三区免费毛片 | 贝利弗山的秘密1985版免费观看 | 国产精品免费看片 | 日本午夜视频 | 亚州精品国产精品乱码不99按摩 | 精品成人一区二区三区 | 丁香啪啪综合成人亚洲 | 女人被狂躁c到高潮 | 美女黄色大片 | 91九色视频| 韩国av一区二区 | 欧美精品一区二区三区三州 | 男女日批网站 | 欧美大片免费播放器 | 最新高清无码专区 | 男人天堂2019 | 在线观看日韩国产 | 正在播放木下凛凛xv99 | 综合视频 | 亚洲九区 | 色四月婷婷 | 看一级黄色大片 | 波多野结衣视频免费看 | 99久久免费国产精精品 | aaa人片在线 | 图片区偷拍区小说区 | 美女在线免费视频 | 中文字幕亚洲精品在线观看 | 免费大片黄在线观看 | 国模私拍xvideos私拍 | 色哟哟精品观看 | 国产日本在线 | 91九色高潮| 国内精品免费 | 成人h动漫精品一区二区 | 777久久| 精品动漫3d一区二区三区免费版 | 免费大片黄在线观看视频网站 | 日批国产| 色综合九九 | 天海翼一区 | 蜜臀av性久久久久av蜜臀妖精 | 国产中文字幕网 | 欧美一区二区二区 | 亚洲av无码精品一区二区 | 免费欧美视频 | 亚洲免费观看高清完整版在线 | 亚洲免费网站在线观看 | 国产乱码久久久久 | 欧美性受xxxxxx黑人xyx性爽 | 成年人黄色大全 | 能看的毛片 | 久久国产柳州莫菁门 | 午夜免费观看 | 久久久久人妻精品色欧美 | 黄色免费版| 亚洲不卡中文字幕无码 | 一区二区三区四区在线观看视频 | 国产精品视频麻豆 | 日本成人一二三区 | 国产黄色网 | 久久久久国产精品国产 | 中国美女黄色一级片 | 天天做天天爱天天爽 | 一区二区三区四区国产 | 欧美一区二区三区在线观看 | 97插插插| 超碰婷婷 | 亚洲成人手机在线 | 日韩一区二区三区四区 | 国产夫妻在线观看 | 草草影院在线观看视频 | 91av视频网站 | 深夜福利日韩 | 国产一级视频在线观看 | 五月激情婷婷综合 | 亚洲a网站| 亚洲一区三区 | 精品熟女一区二区 | 二区视频在线观看 | 中文字幕+乱码+中文乱码91 | 精品无码一区二区三区免费 | 亚洲综人网 | 黄色一级大片在线免费看产 | 日韩欧美亚洲天堂 | kendra lust free xxx| 国产三级在线观看完整版 | 亚洲青涩网 | 成年人性生活免费视频 |