为了账号安全,请及时绑定邮箱和手机立即绑定

求助下各位大佬, 我怎么才能做到将网址标题内容保存到文档中

/ 猿问

求助下各位大佬, 我怎么才能做到将网址标题内容保存到文档中

我做了一个学校校内新闻的爬取,想做一个搜索引擎,可是现在不会保存到本地,如果用以下代码会出现must be str, not list,请教各位大佬

from bs4 import BeautifulSoupimport re import requestsclass downloader(object):    def __init__(self):        self.target = 'http://www.imut.edu.cn/index/gdxw.htm' #目标网址    """    函数说明:获取翻页地址    Parameters:        xiayiye - 下一页地址(string)    Returns:        fanye - 当前页面的翻页地址(list)    """    def get_fanye_url(self,target):        req = requests.get(target) #获取对象        req.encoding = "utf-8" #设置编码格式        html = req.text #获得网页源代码        bf = BeautifulSoup(html,'lxml') #利用BeautifulSoup进行解析        fanye = []        for x in bf.find_all('a',class_="Next"): #找到目标a标签            link = x.get('href') #提取链接            if link:                link =  link.replace('gdxw/','')                link = "http://www.imut.edu.cn/index/gdxw/" + link #将提取出来的链接补充完整                fanye.append(link) #存入列表        return fanye            """    函数说明:获取新闻地址    Parameters:        fanye - 翻页地址(string)    Returns:        xinwen_linklist - 新闻链接(list)    """    def get_xinwen_url(self, fanye):        req = requests.get(fanye) #获取对象        req.encoding = "utf-8" #设置编码格式        html = req.text #获得网页源代码        bf = BeautifulSoup(html,'lxml') #利用BeautifulSoup进行解析        xinwen_linklist = [] #存入翻页地址        for x in bf.find_all('a',href = re.compile('info/')): #找到目标a标签            link = x.get('href') #提取链接            if link:                link = "http://www.imut.edu.cn" + link.replace('../..','') #将提取出来的链接补充完整                xinwen_linklist.append(link) #存入列表        return xinwen_linklist    """    函数说明:获取新闻信息    Parameters:        xinwen_url - 新闻链接(string)    Returns:        xinwen - 新闻信息(list)    """    def get_xinwen(self, xinwen_url):         req = requests.get(xinwen_url) #获取对象         req.encoding = "utf-8" #设置编码格式         html = req.text #获得网页源代码         bf = BeautifulSoup(html,'lxml') #利用BeautifulSoup进行解析                  titles = bf.find_all('h1',class_="xxnrtit") #获取页面所有的h1标签         title = titles[0].text#提取节点转换为文本         print("网址"+xinwen_url)         #print("标题:"+title)         article = bf.find_all('div',class_="xxnrtextcont")[0].text #获取页面正文         #print("正文:"+article)         xinwen = ["网址:"+xinwen_url,"标题:"+title,"作者:来源:新闻网","正文:"+article]          return xinwen,xinwen_url,title,article           if __name__ == "__main__":      dl = downloader()    fanye = dl.get_fanye_url(dl.target)    '''    获取全部的翻页链接    '''        for x in fanye:        b = dl.get_fanye_url(x)        for w in b:  #这一个循环的目的是获取翻页链接的同时去重            if w not in fanye:                 fanye.append(w)                print("翻页链接"+w)            '''    获取每一个翻页链接里的新闻链接    '''    xinwen_url = []    for x in fanye:        a = dl.get_xinwen_url(x)        for w in a:  #这一个循环的目的是获取新闻链接的同时去重            if w not in xinwen_url:                xinwen_url.append(w)                print("新闻地址"+w)    '''    获取每一个新闻链接的新闻信息    '''    xinwen = []    for x in xinwen_url:        xinwen.append(dl.get_xinwen(x))        # coding:UTF-8with open("F:\\index\\a.txt",'a',encoding="utf-8") as f:            for i in xinwen_url:             f.write("网址:"+xinwen_url+"\n",encoding = "utf-8")            f.write("标题:"+title[0].text+"\n",encoding = "utf-8")            f.write("正文:"+article[0].text+"\n",encoding = "utf-8")            f.close()


查看完整描述

1 回答

?
qq_慕仰2463504

这是代码,比较清晰


from bs4 import BeautifulSoup

import re 

import requests


class downloader(object):

    def __init__(self):

        self.target = 'http://www.imut.edu.cn/index/gdxw.htm' #目标网址

    """

    函数说明:获取翻页地址

    Parameters:

        xiayiye - 下一页地址(string)

    Returns:

        fanye - 当前页面的翻页地址(list)

    """

    def get_fanye_url(self,target):

        req = requests.get(target) #获取对象

        req.encoding = "utf-8" #设置编码格式

        html = req.text #获得网页源代码

        bf = BeautifulSoup(html,'lxml') #利用BeautifulSoup进行解析

        fanye = []

        for x in bf.find_all('a',class_="Next"): #找到目标a标签

            link = x.get('href') #提取链接

            if link:

                link =  link.replace('gdxw/','')

                link = "http://www.imut.edu.cn/index/gdxw/" + link #将提取出来的链接补充完整

                fanye.append(link) #存入列表

        return fanye

        

    """

    函数说明:获取新闻地址

    Parameters:

        fanye - 翻页地址(string)

    Returns:

        xinwen_linklist - 新闻链接(list)

    """

    def get_xinwen_url(self, fanye):

        req = requests.get(fanye) #获取对象

        req.encoding = "utf-8" #设置编码格式

        html = req.text #获得网页源代码

        bf = BeautifulSoup(html,'lxml') #利用BeautifulSoup进行解析

        xinwen_linklist = [] #存入翻页地址

        for x in bf.find_all('a',href = re.compile('info/')): #找到目标a标签

            link = x.get('href') #提取链接

            if link:

                link = "http://www.imut.edu.cn" + link.replace('../..','') #将提取出来的链接补充完整

                xinwen_linklist.append(link) #存入列表

        return xinwen_linklist

    """

    函数说明:获取新闻信息

    Parameters:

        xinwen_url - 新闻链接(string)

    Returns:

        xinwen - 新闻信息(list)

    """

    def get_xinwen(self, xinwen_url):

         req = requests.get(xinwen_url) #获取对象

         req.encoding = "utf-8" #设置编码格式

         html = req.text #获得网页源代码

         bf = BeautifulSoup(html,'lxml') #利用BeautifulSoup进行解析

         

         titles = bf.find_all('h1',class_="xxnrtit") #获取页面所有的h1标签

         title = titles[0].text#提取节点转换为文本

         print("网址"+xinwen_url)

         #print("标题:"+title)

         article = bf.find_all('div',class_="xxnrtextcont")[0].text #获取页面正文

         #print("正文:"+article)

         xinwen = ["网址:"+xinwen_url,"标题:"+title,"作者:来源:新闻网","正文:"+article] 




         return xinwen,xinwen_url,title,article      

     

if __name__ == "__main__":  

    dl = downloader()

    fanye = dl.get_fanye_url(dl.target)

    '''

    获取全部的翻页链接

    '''

    

    for x in fanye:

        b = dl.get_fanye_url(x)

        for w in b:  #这一个循环的目的是获取翻页链接的同时去重

            if w not in fanye: 

                fanye.append(w)

                print("翻页链接"+w)        

    '''

    获取每一个翻页链接里的新闻链接

    '''

    xinwen_url = []

    for x in fanye:

        a = dl.get_xinwen_url(x)

        for w in a:  #这一个循环的目的是获取新闻链接的同时去重

            if w not in xinwen_url:

                xinwen_url.append(w)

                print("新闻地址"+w)

    '''

    获取每一个新闻链接的新闻信息

    '''

    xinwen = []

    for x in xinwen_url:

        xinwen.append(dl.get_xinwen(x))

        # coding:UTF-8


with open("F:\\index\\a.txt",'a',encoding="utf-8") as f:

            for i in xinwen_url:

             f.write("网址:"+xinwen_url+"\n",encoding = "utf-8")

            f.write("标题:"+title[0].text+"\n",encoding = "utf-8")

            f.write("正文:"+article[0].text+"\n",encoding = "utf-8")

            f.close()



查看完整回答
反对 回复 2019-07-11

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信