注册 登录
编程论坛 Python论坛

想获取网站前5页信息,但始终只能获取最后一页的内容,如何修改?谢谢!

nicon 发布于 2019-08-22 09:49, 2555 次点击
各位前辈,我根据教程,学习了如何取得第一页的网页信息。之后想尝试获取多页信息。但运行后,始终只能得到最后一页的内容。请问这个时候我应该如何处理?谢谢!

程序代码:
import urllib.request
import re,xlwt

def get_content():
    for i in range(1, 5):
        url = 'https://web.' + str(i)
        a = urllib.request.urlopen(url)
        html = a.read()
        html = html.decode('utf-8')
        # html = get_content()
        #print(html,i)
    return (html)

def get():
    html=get_content()
    reg=('class="chengshi_wz">.*?title="(.*?)".*?class="chengshi_wz_m">(.*?)</div>.*?<div class="chengshi_wz_f">(.*?)</div>',re.S)
    items=re.findall(reg,html)
    #items = items.decode('utf-8')
    #print(items)
    return(items)


#创建表格
def excel_write(items):
    newtable='test.xls' #文件名称
    wb=xlwt.Workbook(encoding='utf-8') #创建excel文件
    ws=wb.add_sheet('test1') #创建sheet名称
    headData=['新闻标题','摘要','作者和时间']
    for colnum in range(0,3):
        ws.write(0,colnum,headData[colnum],xlwt.easyxf('font:bold on')) #0代表行,colum代表列,后面的是数据


    index=1
    for item in items:#新闻信息
        for i in range(0,3):
            #print (item[i])
            ws.write(index,i,item[i])#index代表行,i代表列
        index+=1
        wb.save(newtable)


if __name__=="__main__": #判断文件入口
    items=get()
    excel_write(items)


[此贴子已经被作者于2019-8-22 13:37编辑过]

8 回复
#2
TysonKoothra2019-08-22 13:08
当你想获取网站前5页信息时,你改动了程序哪里的代码。
#3
nicon2019-08-22 13:40
回复 2楼 TysonKoothra
你好。谢谢帮助。
我在第一部分增加了下面的红字内容
def get_content():
    for i in range(1, 5):
        url = 'https://web.' + str(i)
        a = urllib.request.urlopen(url)
        html = a.read()
        html = html.decode('utf-8')
        # html = get_content()
        #print(html,i)
    return (html)
#4
TysonKoothra2019-08-22 13:53
你应该把循环放到if __name__=="__main__":,然后通过参数把页码传到get_content 函数里面
程序代码:

if __name__=="__main__":
    for i in range(1, 6):
        items=get(i)
        excel_write(items)

另外 get_content这么写。
程序代码:

def get_content(i):
    url = 'https://web.' + str(i)
    a = urllib.request.urlopen(url)
    html = a.read()
    html = html.decode('utf-8')
    return (html)

get 应该这么写
程序代码:

def get(i):
    html=get_content(i)
    reg=('class="chengshi_wz">.*?title="(.*?)".*?class="chengshi_wz_m">(.*?)</div>.*?<div class="chengshi_wz_f">(.*?)</div>',re.S)
    items=re.findall(reg,html)
    #items = items.decode('utf-8')
    #print(items)
    return(items)
#5
nicon2019-08-22 13:59
回复 4楼 ljc2020
谢谢答复。
最近刚开始学python,想从工作需求入手,还在依葫芦画瓢的阶段。。你提示的我后续学一下。
#6
nicon2019-08-22 13:59
回复 5楼 TysonKoothra
谢谢答复,我之后按照你说的修改看看。。谢谢!
#7
nicon2019-08-22 18:45
回复 5楼 TysonKoothra
你好,我按照你的指导,修改了以后,运行成功了,但还是只能获取一页的信息呢。是什么地方我没有调整对吗?
程序代码:
import urllib.request
import re,xlwt

def get_content(i):
    url = 'https://web.' + str(i)
    a = urllib.request.urlopen(url)
    html = a.read()
    html = html.decode('utf-8')
    # html = get_content()
    #print(html,i)
    return (html)

def get(i):
    html=get_content(i)
    reg=('class="chengshi_wz">.*?title="(.*?)".*?class="chengshi_wz_m">(.*?)</div>.*?<div class="chengshi_wz_f">(.*?)</div>',re.S)
    items=re.findall(reg,html)
    #items = items.decode('utf-8')
    #print(items)
    return(items)


#创建表格
def excel_write(items):
    newtable='test.xls' #文件名称
    wb=xlwt.Workbook(encoding='utf-8') #创建excel文件
    ws=wb.add_sheet('test1') #创建sheet名称
    headData=['新闻标题','摘要','作者和时间']
    for colnum in range(0,3):
        ws.write(0,colnum,headData[colnum],xlwt.easyxf('font:bold on')) #0代表行,colum代表列,后面的是数据


    index=1
    for item in items:#新闻信息
        for i in range(0,3):
            #print (item[i])
            ws.write(index,i,item[i])#index代表行,i代表列
        index+=1
        wb.save(newtable)


if __name__=="__main__": #判断文件入口
    for i in range(1,6):
        items=get(i)
        excel_write(items)
#8
TysonKoothra2019-08-22 20:41
这次是因为都写到test.xls 这个文件里面了。可以分别写到不同的文件里面。
程序代码:

if __name__=="__main__": #判断文件入口
    for i in range(1,6):
        items=get(i)
        excel_write(items, i) # 这里增加了一个参数i


程序代码:

def excel_write(items, i):
    newtable='test%d.xls' % i    # 使用不同的文件名
    ...
#9
nicon2019-08-22 21:20
回复 9楼 TysonKoothra
这次终于成功啦!谢谢版主!
1