python3 练手:爬取爱问知识人,运用sqlite3保存数据

这篇博客介绍了如何使用Python3爬取爱问知识人的问题和答案,通过分析网页获取标题和答案链接,进一步访问获取详细内容、作答者和时间,并将这些信息构建成字典存储到SQLite3数据库中。在初始实现中,由于字典键值唯一,导致数据库数据不全,作者对此进行了修正,现在只输出title和url。
摘要由CSDN通过智能技术生成

python3 练手:爬取爱问知识人

参考地址:https://cuiqingcai.com/1972.html
获取页面:https://iask.sina.com.cn/c/74.html
分析:获取每个问题的标题及答案地址,访问答案页面获取问题具体内容,答案内容,作答者,作答时间,构造成字典形式保存进数据库
主程序:
def main():
  datadict = get_html(url)
  insertdata(iaskdb,datadict)
实现代码:

字典键值惟一,主键相同的,后者会覆盖前者

        for q_detail in q_items:
            #print(q_detail[0],q_detail[1])
            #self.q_url_lists.append(q_url)
            q_dict['qtitle'] = q_detail[0]
            q_dict['qurl'] = q_detail[1]
            q_index += 1
            countnum += 1
            self.q_dictlist.append(q_dict)

运行以上代码会产生相同的值导致数据库不全

修改后代码:

class IASK:
    def __init__(self):
        self.headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
        self.url_base = 'https://iask.sina.com.cn'
        self.q_db = iasksql.Iasksql()

    def get_html(self,url):
        try:
            myreq = urllib.request.Request(url,headers = self.headers)
            myresponse = urllib.request.urlopen(myreq)
            html = myresponse.read().decode('utf-8')
            return html
        except urllib.request.URLError as e:
            if(hasattr(e,'reason')):
                print("未连接,原因:" + e.reason)

    #获取问题页面
    def get_content(self,html):
        p_title = re.compile('<div.*?"question-title">.*?<a href="(.*?)" target.*?>(.*?)</a>',re.S)
        countnum = 0
        q_items = []
        q_items = re.findall(p_title,html)
        return q_items

    def start(self):
        url_download = 'https://iask.sina.com.cn/c/74.html'
        html = self.get_html(url_download)
        onepagedata = self.get_content(html)
        q_dict = {}
        for qq_dict in onepagedata:
            q_dict['url'] = qq_dict[0]
            q_dict['title'] = qq_dict[1]
            self.q_db.insertdata(q_dict)
        self.q_db.showdb()
        self.q_db.closecur()

spider = IASK()
spider.start()

只输出title及url,结果如下图:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值