学习的爬虫一点小感悟附上爬取淘宝信息的教程

       学习了一个月的爬虫,对爬虫的概念和思路有了一个基本了解,爬虫的基本思路是:首先获取网页源码,使用urllib,request库等;然后对网页源码进行筛选出需要的信息,使用正则表达式,BeautifulSoup库等,最常用的还是正则表达式;其次就是存储信息,可以将信息存储到excel表格,txt文件中,也可以存储到Mysql等数据库中。在学习爬虫的阶段也是对python语言的一种更深入的学习和理解,爬虫涉及很多的知识,python是最基础,还有网页,数据库等知识,如果想深入学习python,建议从爬虫入手。。。。。爬虫的入门教程:《Python 3网络爬虫开发实战 ,崔庆才著》(文末附书本下载链接),爬虫想入门,必须得自己动手多写,先模仿写后独立写,形成写自己的代码风格,切勿直接把别人的代码直接粘贴复制!!!,最后以一个教程作为本月的学习总结。

爬取淘宝上华为手机前10页信息的教程:

       目标:爬取淘宝上华为手机前10页的信息(名称,价格,付款人数),并保存在excel表格中。

       环境:python3.6编译器, pycharm,  谷歌浏览器                                                                                                                                                     

       思路:获取网页源码—>正则表达式筛选—>保存到excel表格

      一、获取网页源码

     淘宝网有一定反爬虫的手段,如果用简单的获取网页的方式可能得不到一个真正的网页源码,需要模拟request Header请求,如何获取?使用谷歌浏览器,打开淘宝网搜索华为的页面,点击鼠标右键,选择检查选项,然后点击到‘Network’选择界面,重新加载华为的页面,最后双击第一个词条就可得到以下界面,将红色方框的内容添加到get请求headers中即可。

                                                  

二、正则表达式筛选信息

        我前面的文章这部分内容写的很多,也很详细,可去参考一下,此处不再详细讲解。

三、存储信息

       本教程是将信息存储到excel表格中,首先创建excel表格,导入xlwt模块,inforfiile = xlwt.Workbook(),然后创建sheet1工作簿,sheet1 = inforfiile.add_sheet(u'sheet1',cell_overwrite_ok=True),最后像里面写入数据,写入数据时,要指定对应的行和列。

四、小技巧

1、方法zip():zip()是将不同的列表中的元素可以一一对应,当使用正则表达式获取到华为手机的名称、价格、付款人数后是三个列表,每个列表中元素可以一一对应,如何将其对应到一起,可以使用zip()方法。具体的使用教程自行百度。

2、翻页:首先观察三条链接:

1.https://s.taobao.com/search?q=%E5%8D%8E%E4%B8%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44(第二页)

2.https://s.taobao.com/search?q=%E5%8D%8E%E4%B8%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s=88(第三页)

3.https://s.taobao.com/search?q=%E5%8D%8E%E4%B8%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=-3&ntoffset=-3&p4ppushleft=1%2C48&s=132(第四页)

可以观察到三条链接的不同之处,我在文中已经标出了,每页中最后s值相差44,所以可以根据这个来翻页。当然链接中还有其他的不同之处,例如bcoffset的值不同等,但这些都不是获取下一个页面的方法,可自行实验。。。文末附完整代码,仅供参考!!!

import requests
from requests.exceptions import RequestException
import re
import xlwt
from urllib.parse import urlencode
import time

def get_url(keyword, number_two):
    '''
        获取关键字的链接
        :param keyword:    关键字
        :param number_two:    不同的数值对应不同的页码,淘宝上第一页为0 ,第二页为44
                               第三页为88.。。。
        :return:   不同页码的链接
    '''
    data= {
        'ie': 'utf8',
        'initiative_id': 'staobaoz_20180830',
        'stats_click': 'search_radio_all:1',
        'js': '1',
        'imgfile': ' ',
        'q': keyword,
        'suggest': 'history_3',
        '_input_charset': 'utf - 8',
        'wq': ' ',
        'suggest_query': ' ',
        'source': 'suggest',
        'bcoffset': '6',
        'ntoffset': '6',
        'p4ppushleft': '1, 48',
        's': number_two
    }
    url = r'https://s.taobao.com/search?'+urlencode(data)
    return url
def get_html(url):
    '''
       获取网页源码
       注:   字典header必须要,模拟浏览器访问,如果没有,可能无法获取真正的网页源码
       :param url:
       :return:
       '''
    header = {
        'authority': 's.taobao.com',
        'method': 'GET',
        'path': '/search?q=%E5%8D%8E%E4%B8%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306',
        'scheme': 'https',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9',
        'cache-control': 'max-age=0',
        'cookie': 't=36cb250100b52693b17ae64bc1bfdd70; cna=VyPnE24R+BkCATutHgrsC+PV; thw=cn; enc=a3RNml%2FS%2BsGExETuWVzeQtnku9tWlLTy8SAFpvYnh8dmn1LPXEmw5YZa%2Bp6MFnSuPtZGWzYPfymeYAg6dyDCnw%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; miid=75000991625205136; _m_h5_tk=31112bbc02d3d787d370cfe5fd3623f7_1535451779885; _m_h5_tk_enc=6cf0675f1fcc9c93fc7919e3da3e79db; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; v=0; cookie2=34115b060c8e01bc8e9915cd17f750a4; _tb_token_=e761eedae8eae; JSESSIONID=C52D3D32676B70B8B9A15B9865025A9A; isg=BJubrzdiRKUI97i8-ww_luaHKv-pbq751j8AYI3YdhqxbLtOFUQQwryuAozHzAdq',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
    }  # 模拟浏览器访问
    response = requests.get(url, headers=header)
    try:
        if response.status_code ==200:
            return response.text
        else:
            return None
    except RequestException:
        print("页面请求错误!")
        return None
def get_select(html,num_one):
    row = ['名称', '价格', '销量']
    reg_lect = r'"raw_title":"(.*?)"'      #名称
    reg_com = re.compile(reg_lect)
    reg_lectlists = reg_com.findall(html, re.S)
    reg_price = r'"view_price":"(.*?)"'    #价格
    reg_com_pri = re.compile(reg_price)
    reg_pricelists = reg_com_pri.findall(html, re.S)
    reg_sale = r'"view_sales":"(.*?)"'     #销量
    reg_com_sale = re.compile(reg_sale)
    reg_salelists = reg_com_sale.findall(html,re.S)
    for num in range(3):
        sheet1.write(0, num, row[num])    #向excel表格里写入名称,价格等信息
    infor_taobao = zip(reg_lectlists, reg_pricelists, reg_salelists)
    infor_taobaos = list(infor_taobao)
    print(infor_taobaos)
    for huawei in infor_taobaos:
        sheet1.write(num_one,0, huawei[0])
        sheet1.write(num_one,1, huawei[1])
        sheet1.write(num_one,2, huawei[2])
        num_one+=1
    print(num_one)
    num_two = num_one
    inforfiile.save('华为手机信息.xls')
    return num_two

if __name__ == '__main__':
    number = 0
    num_one = 1
    inforfiile = xlwt.Workbook()    #创建excel表格
    sheet1 = inforfiile.add_sheet(u'sheet1',cell_overwrite_ok=True)  #创建sheet1
    while number<397:
        url = get_url('华为',number)
        print(url)
        html = get_html(url)
        number_one = get_select(html,num_one)
        num_one = number_one
        number+=44
        time.sleep(1)

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远去的星光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值