账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    按照一个仿例写了一个爬取amazon网页的程序,但是有诸多的错误,是在不明白,求助!
    75
    0

    爬取的是Amazon中国,手机->手机通讯->Apple Phone中的商品标题和价格。
    其URL=https://www.amazon.cn/s/ref=s...
    我的python代码如下:

    import requests
    from bs4 import BeautifulSoup
    import re #用于HTML配合查找条件
    import time #用于文件名的保存
    
    #获取总页面数量
    def get_total_page_number():
        user_agent = 'Mozilla/5.0 (Windows NT 6.3;WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/45.0.2454.101 Safari/537.36'
        headers = {'User-Agent':user_agent} #定义头信息
        # 寻找页码的URL
        url = 'https://www.amazon.cn/s/ref=sa_menu_digita_l3_siphone?ie=UTF8&page=1&rh=n%3A665002051%2Cp_89%3AApple%2Cn%3A664978051'
        res = requests.get(url,headers=headers) #发送请求
        html = res.text
        html_soup = BeautifulSoup(html,"lxml") #建立soup对象,用于处理html
        page_number_span = html_soup.find('h2',id='s-result-count') #查找id="s-result-count"的h2标签
        page_number_code = page_number_span.text #读取该标签的文本信息
        number_list = re.findall(r'(\w*[0-9]+)\w',page_number_code) #使用正则表达式解析出文本中的3个数字
        total_page_number = (int(number_list[-1])/int(number_list[-2])+1) #计算得出总的页码
        return int(total_page_number) #返回页面数字
    
    #解析单页面
    def parse_single_page(i):
        url_part1 = 'https://www.amazon.cn/s/ref=sa_menu_digita_l3_siphone?ie=UTF8&page=%d' % i #定义URL动态前半部分
        url_part2 = '&rh=n%3A665002051%2Cp_89%3AApple%2Cn%3A664978051' #定义URL静态后半部分
        url = url_part1 + url_part2 #拼接完整的URL
        print ('prase url: %s' % url) #输出URL信息
        user_agent = 'Mozilla/5.0 (Windows NT 6.3;WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/45.0.2454.101 Safari/537.36'
        res = requests.get(url,headers=headers) #发送请求
        html = res.text
        html_soup = BeautifulSoup(html,"lxml") #建立soup对象,用于处理html
        tag_list = html_soup.find_all('li', id=re.compile('^result.*')) #查找id以result开始的li标签,返回列表
        #读取列表中每一个标签(一个标签对应一个商品)
        for tag_info in tag_list:
            #价格解析
            print (tag_info)
            price_code = tag_info.find('span', class_="a-size-base a-color-price s-price a-text-bold")
            #若价格标签不空则取出价格文字
            if price_code != None:
                #解析商品标题
                title_code = tag_info.find('h2') #查找标题标签
                title = title_code.text #取出标题标签文字
                write_data(title,price) #每次解析完成写入文件
                
    #将数据写入文件
    def write_data(title,price):
        file_data = time.strftime('%Y-%m-%d',time.localtime(time.time())) #取当前文件日期用于文件命名
        fn = open('%s.txt' % file_data,'a+') #新建文件对象,以追加模式打开
        content = title + '\t' + price + '\n' #写内容,标题和价格以tab分割,末尾增加换行符
        fn.write(content) #写入文件
        fn.close()
        
    #解析多页面并写入文件
    def main():
        total_page_number = get_total_page_number() #获得页面总数
        for i in range(1,int(total_page_number)+1):
            parse_single_page(i)
    
    main()

    报的错误如下:

    AttributeError                            Traceback (most recent call last)
    <ipython-input-5-5527ff76ca42> in <module>()
         51         parse_single_page(i)
         52 
    ---> 53 main()
    
    <ipython-input-5-5527ff76ca42> in main()
         47 #解析多页面并写入文件
         48 def main():
    ---> 49     total_page_number = get_total_page_number() #获得页面总数
         50     for i in range(1,int(total_page_number)+1):
         51         parse_single_page(i)
    
    <ipython-input-5-5527ff76ca42> in get_total_page_number()
          9     html_soup = BeautifulSoup(html,"lxml") #建立soup对象,用于处理html
         10     page_number_span = html_soup.find('h2',id='s-result-count') #查找id="s-result-count"的h2标签
    ---> 11     page_number_code = page_number_span.text #读取该标签的文本信息
         12     number_list = re.findall(r'(\w*[0-9]+)\w',page_number_code) #使用正则表达式解析出文本中的3个数字
         13     total_page_number = (int(number_list[-1])/int(number_list[-2])+1) #计算得出总的页码
    
    AttributeError: 'NoneType' object has no attribute 'text'
    

    我解决了一些问题,但是这个问题上网查了还就还是不能解决,请求大神的帮助,谢谢!
    我基本每行都有注释,希望能有效帮助大神阅读,小弟感谢!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部