鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ 模仿b站做了一個網(wǎng)頁爬蟲,但是運行錯誤,不知道是哪里出錯了。

模仿b站做了一個網(wǎng)頁爬蟲,但是運行錯誤,不知道是哪里出錯了。

代碼如下:

import requests
import re

def getHTMLText(url):
    try:
        r = requests.get(url, timeout = 1000)
        r.raise_for_status()
        r.encoding = r.apparent.encoding
        return r.text
    except: 
        return ''

def parsePage(ilt, html):
    try:
        llt = re.findall(r'\"title\"\:\".*?\"',html)
        plt = re.findall(r'\"initialPrice\"\:\"[\d\.]*\"',html)
        for i in range (len(plt)) :
            location = eval(llt[i].split(':')[1])
            price = eval(plt[i].split(':')[1])
            ilt.append([location, price])
    except:
        print('')

def printGoodsList(ilt):
    tlpt = '{:4}\t{:20}\t{:8}'
    print(tlpt.format('序號','房子','價格'))
    count = 0
    for g in ilt:
        count = count + 1
        print(tlpt.format(count,g[0],g[1]))
  
def main():
    depth = 30
    start_url = 'https://sf.taobao.com/list/50025969__1___%BA%BC%D6%DD.htm?spm=a213w.7398504.pagination.1.Hn2fOe&auction_start_seg=-1'
    infoList = []
    for i in range(2,1,depth):
        try:
            url = start_url + '&page=' + str(i)
            html = getHTMLText(url)
            parsePage(infoList, html)
        except:
            continue
    printGoodsList(infoList)

main( )

運行結(jié)果如下圖
圖片描述

回答
編輯回答
青檸

注意正則的*號,看圖片

import requests
import re
def text():

for a in range(1,13):
    url = 'https://sf.taobao.com/list/50025969__1___%BA%BC%D6%DD.htm?spm=a213w.7398504.pagination.3.W9af3L&auction_start_seg=-1&page='+str(a)
    html = requests.get(url).text
    ids = re.findall('"id":(.*?),"itemUrl"',html)
    names = re.findall('"title":"(.*?)"',html)
    prices = re.findall('"initialPrice": (.*?) ,"currentPrice"',html)
    find = zip(ids,names,prices)
    for txt in find:
        print(txt)

if name == '__main__':

print('\t\t\t序號\t\t\t','\t\t\t\t\t地點\t\t\t','\t\t\t\t\t\t價格')
text()

圖片描述

2017年1月24日 20:29
編輯回答
傲寒

主要是兩個原因:
一是你生成http請求的時候,沒有http header,你根本沒有抓到頁面
二是這個網(wǎng)頁是通過js動態(tài)生成的,你要拿到數(shù)據(jù)必須根據(jù)js代碼來看他怎么寫的數(shù)據(jù)接口

2017年8月31日 01:36
編輯回答
傻叼

頁面我沒看,從代碼上說:
def main():

depth = 30
start_url = 'https://sf.taobao.com/list/50025969__1___%BA%BC%D6%DD.htm?spm=a213w.7398504.pagination.1.Hn2fOe&auction_start_seg=-1'
infoList = []
for i in range(2,1,depth):
    try:
        url = start_url + '&page=' + str(i)
        html = getHTMLText(url)
        parsePage(infoList, html)
    except:
        continue
printGoodsList(infoList)

中的range區(qū)間寫的有問題

2017年8月5日 21:56