美文网首页
项目实战-百思不得姐页面爬取

项目实战-百思不得姐页面爬取

作者: 部落大圣 | 来源:发表于2018-05-12 10:45 被阅读42次

    完整代码

    # coding:utf-8
    
    import requests
    from lxml import etree
    import xlwt
    
    
    class budejieData(object):
        """
        初始化变量,创建工作薄,表单,表头
        """
        def __init__(self):
            self.count = 1  # 定义全局变量
            self.f = xlwt.Workbook()  # 创建工作薄
            self.sheet1 = self.f.add_sheet(u'任务列表', cell_overwrite_ok=True)
            self.rowTitle = [u'编号', u'作者', u'段子', u'图片']
            for i in range(0, len(self.rowTitle)):
                self.sheet1.write(0, i, self.rowTitle[i])
            self.f.save('budejie.xlsx')
        """
        页面循环函数
        """
        def getUrl(self):
            for i in range(5):
                url = 'http://www.budejie.com/{}'.format(i+1)
                self.spiderPage(url)
    
        """
        爬取页面函数
        """
        def spiderPage(self, url):
            if url is None:  # 判断链接是否为空
                return None
            try:
                proxies = {
                    'http': 'http://125.46.0.62:53281',  # 代理IP地址防止被封
                }
                user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/' \
                             '51.0.2704.106 Safari/537.36'  # 模拟浏览器访问
                headers = {'User_Agent': user_agent}
                response = requests.get(url, proxies=proxies, headers=headers).text
                select = etree.HTML(response)
                trs = select.xpath('/html/body/div[2]/div/div[2]/div[1]/div[2]/ul/li')  # 提取tr之前的节点集合
                """
                遍历trs 逐条抓取数据
                """
                for tr in trs:
                    data = []
                    author = tr.xpath('./div[1]/div[2]/a/text()')
                    title = tr.xpath('./div[2]/div[1]/a/text()')
                    img = tr.xpath('./div[2]/div[2]/a/img/@src')
                    author = author[0] if len(author) > 0 else ''
                    title = title[0] if len(title) > 0 else ''
                    img = img[0] if len(img) > 0 else''
                    print author, title, img
                    """
                    拼成一个集合
                    """
                    data.append(self.count)  # 插入编号
                    data.append(author)  # 插入作者
                    data.append(title)  # 插入内容
                    data.append(img)  # 插入图片
                    self.count += 1  # 增加记录行数
                    for i in range(len(data)):
                        self.sheet1.write(data[0], i, data[i])
                    self.f.save('budejie.xlsx')
    
            except Exception, e:
                print '出错', e.message
    """
    实例化,执行函数
    """
    
    if '_main_':
        Job = budejieData()
        Job.getUrl()
    
    百思不得姐

    问题总结

    这次 实战是对寒大佬的套路第三次运用,这次倒是写的挺溜,一个小时搞定。自以为很简单,结果打印不出结果,抱着疑问去睡觉。早上打印链接才发现问题

     for i in range(5):
                url = 'http://www.budejie.com/i'.format(i+1)
    

    打印结果都是

    http://www.budejie.com/i
    

    修改

     for i in range(5):
                url = 'http://www.budejie.com/{}'.format(i+1)
    

    正确打印

    今天还有发现,除了错误的缩减会导致代码错误。还有未来代码的美观遵从PEP8协议。函数与函数直接空行不要太多。
    再次感谢@逆水寒大佬你的套路真好用。

    相关文章

      网友评论

          本文标题:项目实战-百思不得姐页面爬取

          本文链接:https://www.haomeiwen.com/subject/fiucdftx.html