【Python】網(wǎng)頁數(shù)據(jù)爬取實戰(zhàn)

由于網(wǎng)頁結(jié)構(gòu)跟之前有變化铸董,還不是很熟悉。代碼待完善肴沫,問題記錄:

  • 騰訊新聞二級網(wǎng)頁內(nèi)容爬取有問題粟害。
  • 鏈家網(wǎng)站頭文件沒有用到。

爬取一條騰訊視頻的header內(nèi)容颤芬,存入txt悲幅。要求:

  1. 包含網(wǎng)頁鏈接
  2. 包含title
  3. 包含所有headers信息
import requests
from bs4 import BeautifulSoup

u = 'http://news.qq.com/a/20170205/023923.htm'
r = requests.get(url = u)
headers = r.headers #獲取網(wǎng)頁頭部信息
#print(headers)
soup =  BeautifulSoup(r.text,'lxml')
title = soup.title.text #獲取網(wǎng)頁title內(nèi)容
#print(title)
f = open('C:\\Users\\Administrator\\Desktop\\lianxi\\header.txt','w',encoding='utf8')
f.seek(0)
# 創(chuàng)建一個txt文件

f.write('爬取網(wǎng)頁:'+str(u)+'\n')
f.write('新聞標(biāo)題為:'+title+'\n')

for i in headers:
    lst = [i,':',headers[i],'\n']
    f.writelines(lst)

f.close()
print('finished!')

爬取騰訊新聞網(wǎng)站上,某一天的某類新聞標(biāo)題站蝠。要求:

  1. 開頭:‘XX年XX月XX日騰訊新聞’
  2. 包括新聞標(biāo)題和網(wǎng)址
    (爬取每一條新聞的內(nèi)容(二級標(biāo)題))
import requests
from bs4 import BeautifulSoup
import re

u = 'http://news.qq.com/world_index.shtml'
r = requests.get(url = u)
soup = BeautifulSoup(r.text,'lxml')
f = open('C:\\Users\\Administrator\\Desktop\\lianxi\\news.txt','w',encoding='utf8')
f.seek(0)
# 創(chuàng)建一個txt文件

f.write('2018年8月26日騰訊新聞\n')

news = soup.find_all('a',href=re.compile('http://news.qq.com/a/20180825/'))
#print(news)

for i in news:
    #print(i)
    txt = i.text.strip()#strip() 用于去掉前后空格
    if  txt =='':
        continue
    else:
        lst = [txt,',','url=',i.attrs['href']]
        f.writelines(lst)
    
f.close()
print('finished!')

修改

import requests
from bs4 import BeautifulSoup
import re

u = 'http://news.qq.com/world_index.shtml'
r = requests.get(url = u)
soup = BeautifulSoup(r.text,'lxml')
f = open('C:\\Users\\Administrator\\Desktop\\lianxi\\news.txt','w',encoding='utf8')
f.seek(0)
# 創(chuàng)建一個txt文件

f.write('2018年8月26日騰訊新聞\n')

news = soup.find_all('a',href=re.compile('//new.qq.com/omn/20180826'))
#print(news)

for i in news:
    #print(i)
    txt = i.text.strip()#strip() 用于去掉前后空格
    if  txt =='':
        continue
    else:
        lst = [txt,',','url=','http:',i.attrs['href'],'\n']
        f.writelines(lst)
    
f.close()
print('finished!')

添加正文內(nèi)容:

import requests
from bs4 import BeautifulSoup
import re

u = 'http://news.qq.com/world_index.shtml'
r = requests.get(url = u)
soup = BeautifulSoup(r.text,'lxml')
f = open('C:\\Users\\Administrator\\Desktop\\lianxi\\news2.txt','w',encoding='utf8')
f.seek(0)
# 創(chuàng)建一個txt文件

f.write('2018年8月26日騰訊新聞\n')

news = soup.find_all('a',href=re.compile('http://news.qq.com/a/2018'))
#print(news)

for i in news:
    #print(i)
    txt = i.text.strip()#strip() 用于去掉前后空格
    if  txt =='':
        continue
    else:
        ul = i.attrs['href']
        ur = requests.get(url = ul)
        usoup = BeautifulSoup(ur.text,'lxml')  
        f.write(txt+'\n')
        #打印正文
        f.write('正文如下:\n')
        
        if usoup.body.attrs[id]=='P-QQ':#排除圖片新聞
            continue
        else:
            p = usoup.find('div',id="Cnt-Main-Article-QQ").find_all('p')
            for i in p:
                print(i.text)
                f.write(i.text+'\n')
    f.write('\n')
f.close()
print('finished!')
爬蟲正確的習(xí)慣和邏輯
  • 函數(shù)式爬取
  • 用瀏覽器去訪問汰具,headers信息
    r = request.get(url='...',headers={...})以瀏覽器的形式向網(wǎng)頁進行請求
    頭部信息

headers = input("粘貼頭部信息:")
lst = headers.split('\n')
m=[]
for i in lst:
    key = i.split(':')[0]
    value = i.split(':')[1]
    m.append([str(key),str(value)])

print(dict(m))
def header_format(h):
    """
    函數(shù)用于轉(zhuǎn)譯網(wǎng)頁headers信息
    h:輸入的headers信息
    """
    h = input("粘貼頭部信息:")
    lst = h.split('\n')
    m=[]
    for i in lst:
        key = i.split(':')[0]
        value = i.split(':')[1]
        m.append([str(key),str(value)])
    return(dict(m))

print(header_format(headers))
用函數(shù)式寫法的優(yōu)點:
  • 閱讀性更強
  • 函數(shù)的可復(fù)制性
  • 便于修改

爬取一條騰訊視頻的header內(nèi)容,存入txt菱魔。函數(shù)式編寫:

  1. 包含網(wǎng)頁鏈接
  2. 包含title
  3. 包含所有headers信息

爬取鏈家二手房數(shù)據(jù)-深圳

import requests
from bs4 import BeautifulSoup
import re

def url_analysis(u, h, s, n):
    '''
    用于分析網(wǎng)頁留荔,最后得到一個含有二級網(wǎng)址的標(biāo)簽列表
    u:起始網(wǎng)址
    h:頭部信息
    s:二級網(wǎng)址包含特定字段
    n:頁碼
    '''
    url_lst=[]
    for i in range(1,n+1):
        if i == 1:
            r = requests.get(url=u+'nb1rs深圳/') 
        else:
            r = requests.get(url=u+'pg'+str(i)+'nb1rs深圳/')
        soup = BeautifulSoup(r.text,'lxml')
        r2 = soup.find_all('a',href=re.compile(s))
        for j in r2:
            r3 = j.attrs['href']
            url_lst.append(r3)
        return(url_lst)

def content(u,h):
    '''
    爬取網(wǎng)頁標(biāo)簽信息
    u:爬取的二級網(wǎng)址
    h:頭部信息
    '''
    r = requests.get(url=u)
    r.encodinge = 'utf-8'
    soup = BeautifulSoup(r.text,'lxml')
    t = soup.title.text #爬取標(biāo)題
    toprice = soup.find('div',class_='price').find('span',class_='total').text
    unprice = soup.find('div',class_='unitPrice').find('span',class_='unitPriceValue').text
    area = soup.find('div',class_='area').find('div',class_='mainInfo').text
    base = soup.find('div',class_='base').find('div',class_='content').find_all('li')
    year = base[-1].text
    pattern = 'resblockPosition:\'(.*?)\','               #.*?任意字符
    position =re.search(pattern,r.text).group(1)
    lng = position.split(',')[0]
    lat = position.split(',')[1]
    return([t,',', toprice,',', unprice,',', area,',', year,',',lng,',',lat,'\n'])                   
                      
    


if __name__ == '__main__': #main函數(shù)
    web_u = 'https://sz.lianjia.com/ershoufang/'
    web_h = {
             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
             'Accept-Encoding': 'gzip, deflate, br', 
             'Accept-Language': 'zh-CN,zh;q=0.9',
             'Connection': 'keep-alive',
             'Cookie': 'TY_SESSION_ID=93f5b43a-5dc9-4d96-b57a-a4eb78f8dc15; lianjia_uuid=614ed9e0-dc25-421f-ba8b-141c574dbb47; _smt_uid=5b80defd.8430805; UM_distinctid=1656f670d3e4ff-02814a7ed21053-b34356b-1fa400-1656f670d3fdd7; _jzqx=1.1535172349.1535172349.1.jzqsr=bj%2Elianjia%2Ecom|jzqct=/.-; _ga=GA1.2.50227061.1535172352; ljref=pc_sem_baidu_ppzq_x; lianjia_ssid=dbe87b29-353a-45c2-97cf-aae666e2771b; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1535172349,1535201139,1535358484; _jzqa=1.3976151446564617700.1535172349.1535201139.1535358484.3; _jzqc=1; _jzqy=1.1535201139.1535358484.1.jzqsr=baidu|jzqct=%E9%93%BE%E5%AE%B6%E7%BD%91.-; _jzqckmp=1; _gid=GA1.2.1182771159.1535358486; select_city=440300; all-lj=c32edd623b8a5a59c7de54c92107bb6c; _qzjc=1; CNZZDATA1255849469=275538323-1535355329-%7C1535355329; CNZZDATA1254525948=1806440598-1535354494-%7C1535354494; CNZZDATA1255633284=72361912-1535358081-%7C1535358081; CNZZDATA1255604082=1229464985-1535356409-%7C1535356409; Hm_lpvt_9152f8221cb6243a53c83b956842be8a=1535359605; _qzja=1.1736056849.1535358739249.1535358739249.1535358739249.1535359600160.1535359605575.0.0.0.10.1; _qzjb=1.1535358739249.10.0.0.0; _qzjto=10.1.0; _jzqb=1.15.10.1535358484.1',
             'Host': 'sz.lianjia.com',
             'Referer': 'https',
             'Upgrade-Insecure-Requests': '1',
             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
             }
    web_s = 'https://sz.lianjia.com/ershoufang/105'
    web_n = 3
    
    f = open('C:\\Users\\Administrator\\Desktop\\lianxi\\lianjia.txt','w')
    f.seek(0)
    f.write('title,total_price萬元,unprice元/平方米,area平方米,產(chǎn)權(quán)年限,lng,lat\n')
    for i in url_analysis(web_u, web_h, web_s, web_n):
        data = content(i,web_h)
        f.writelines(data)
        print(data)
    f.close()
    print('finished!')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市澜倦,隨后出現(xiàn)的幾起案子聚蝶,更是在濱河造成了極大的恐慌杰妓,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碘勉,死亡現(xiàn)場離奇詭異巷挥,居然都是意外死亡,警方通過查閱死者的電腦和手機验靡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門倍宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胜嗓,你說我怎么就攤上這事高职。” “怎么了兼蕊?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵初厚,是天一觀的道長。 經(jīng)常有香客問我孙技,道長产禾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任牵啦,我火速辦了婚禮亚情,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哈雏。我一直安慰自己楞件,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布裳瘪。 她就那樣靜靜地躺著土浸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彭羹。 梳的紋絲不亂的頭發(fā)上黄伊,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音派殷,去河邊找鬼还最。 笑死,一個胖子當(dāng)著我的面吹牛毡惜,可吹牛的內(nèi)容都是我干的拓轻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼经伙,長吁一口氣:“原來是場噩夢啊……” “哼扶叉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辜梳,失蹤者是張志新(化名)和其女友劉穎粱甫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體作瞄,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡茶宵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宗挥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乌庶。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖契耿,靈堂內(nèi)的尸體忽然破棺而出瞒大,到底是詐尸還是另有隱情,我是刑警寧澤搪桂,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布透敌,位于F島的核電站,受9級特大地震影響踢械,放射性物質(zhì)發(fā)生泄漏酗电。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一内列、第九天 我趴在偏房一處隱蔽的房頂上張望撵术。 院中可真熱鬧,春花似錦话瞧、人聲如沸嫩与。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽划滋。三九已至,卻和暖如春埃篓,著一層夾襖步出監(jiān)牢的瞬間古毛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工都许, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫂冻。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓胶征,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桨仿。 傳聞我的和親對象是個殘疾皇子睛低,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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