爬蟲(chóng):爬取58同城

本來(lái)想爬取一些由js加載的數(shù)據(jù)(瀏覽人數(shù)),但是這個(gè)頁(yè)面改版了,瀏覽人數(shù)直接呈現(xiàn)的。并且成色,發(fā)布日期兩項(xiàng)都沒(méi)有了,所以本次爬蟲(chóng)基本還是之前的套路。

結(jié)果
from bs4 import BeautifulSoup
import requests
import json
import time

User_Agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
headers = {
    'User-Agent': User_Agent,
}


# 發(fā)帖時(shí)間,成色沒(méi)有
def request_details(url):
   f = requests.get(url, headers=headers)
    soup = BeautifulSoup(f.text, 'lxml')
    category = soup.select('div.breadCrumb.f12 > span:nth-of-type(4)')
    title = soup.select('h1.info_titile')
    price = soup.select('span.price_now > i')
    area = soup.select('div.palce_li > span > i')
    view_num = soup.select('span.look_time')

    data = {
        'title': title[0].text,
        'category': category[0].text.strip(),
        'price': price[0].text,
        'area': area[0].text,
        'view_num': view_num[0].text
    }
    return data
   

def get_link(url):
    f = requests.get(url)
    soup = BeautifulSoup(f.text, 'lxml')
    links = soup.select('zzinfo > td.img > a')
    link_list = []
    for link in links:
        link_content = link.get('href')
        link_list.append(link_content)
    return link_list


def save_to_text(content):
    content = json.dumps(content, ensure_ascii=False)
    with open('58', 'a', encoding='utf-8') as f:
        f.write(content)
        f.write('\r\n')


def main():
    link = 'http://bj.58.com/pbdn/0/pn{}'
    start = 1
    end = 10
    urls = [link.format(i) for i in range(start, end)]
    for url in urls:
        link_list = get_link(url)
        for link in link_list:
            content = request_details(link)
            time.sleep(1)
            print(content)
            save_to_text(content)


if __name__ == '__main__':
    main()

這個(gè)跟之前爬取的小豬短租別無(wú)二致,所以需要總結(jié)的不多,說(shuō)說(shuō)其中遇到的一些問(wèn)題吧!

  • 之前沒(méi)有掛代理,所以58阻止了爬蟲(chóng)進(jìn)行,于是加了代理headers
  • 爬取的部分?jǐn)?shù)據(jù)需要處理,用了strip()方法截取了字符前后的空格
  • 又忘記了寫(xiě)入text文本的方法,牢記,這個(gè)查著不好查
def save_to_text(content):
    content = json.dumps(content, ensure_ascii=False)
    with open('58', 'a', encoding='utf-8') as f:
        f.write(content)
  • 在select有些類(lèi)的時(shí)候,在HTML中顯示的比方說(shuō)ifo t,中間有空格,但是寫(xiě)在path中就必須加'_'這個(gè)下劃線,也就是用下劃線代替空格
  • 不在使用zig來(lái)做循環(huán)了,實(shí)際上,每次爬取頁(yè)面就只有那么一個(gè)東西,所以就用title[0].text來(lái)保證,[0]是選取列表第一個(gè)元素(就只有一個(gè)元素),text就是get_text()的作用
    總結(jié):
    1.先寫(xiě)出爬出一個(gè)詳細(xì)頁(yè)面的爬蟲(chóng)
    2.在從預(yù)覽頁(yè)面爬取進(jìn)入詳細(xì)頁(yè)面的跳轉(zhuǎn)連接
    3.添加預(yù)覽頁(yè)面的list,然后加入for循環(huán),使得每個(gè)預(yù)覽頁(yè)面都爬取其所有的詳細(xì)頁(yè)面。
    4.可以選擇保存進(jìn)text
    5.爬取瀏覽量,假設(shè)是js加載的
    比方這個(gè)是js加載的,我們就想辦法生成這個(gè)申請(qǐng)地址,這個(gè)申請(qǐng)地址的區(qū)別就是里面的一串id,而這個(gè)id有存在在url中,所以我們可以獲取url,然后截取id,再拼裝成申請(qǐng)地址

    代碼:
    1.從網(wǎng)頁(yè)的url解析出來(lái)id
    2.把id加進(jìn)api申請(qǐng)網(wǎng)址中,
    3.申請(qǐng),得到返回
    4.注意的問(wèn)題是這里面可能還需要用到headers,具體碰到了注意一下
    Paste_Image.png

以上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 聲明:本文講解的實(shí)戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流,請(qǐng)勿用于任何商業(yè)用途! 一、前言 強(qiáng)烈建議:請(qǐng)?jiān)陔娔X的陪同下,閱讀本文...
    Bruce_Szh閱讀 13,026評(píng)論 6 28
  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,521評(píng)論 0 15
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 我總想要深刻一點(diǎn),不滿足于生活的膚淺。仿佛有點(diǎn)偏執(zhí),比起物質(zhì)主義的人,更加不容易幸福。形而上的追尋,往往更加難以滿...
    2小閱讀 473評(píng)論 0 2
  • 周一的上午,公司例會(huì)的氣氛異常緊張,西裝革履的林進(jìn)茂坐在會(huì)議室中間一把手的位置上邊刷朋友圈,邊聽(tīng)在座的五位部門(mén)負(fù)責(zé)...
    貳豐閱讀 307評(píng)論 1 0

友情鏈接更多精彩內(nèi)容