转:python爬虫爬取淘宝网页

源码

import requests
import re

\#获取页面函数
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()                #如果状态码不是200,将产生一个异常
        r.encoding=r.apparent_encoding      #编码形式改为从内容中分析出的编码
        return r.text                       #返回页面内容
    except:
        print("错误")

\#对页面进行解析
def parsePage(ilt,html):
    try:
        #在爬取下来的网页中进行查找价格
        plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
        #原文本为 "view_price":"29.90"  第1/2/3/4/6/7表示转义符,*表示小数位数不限
        tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
        #a.*?b 表示以a开始以b结束最短的  上面以"raw_title":" 开始,以"结束
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])      #分割plt,返回以 : 分割的字符,分割1次
            title = eval(tlt[i].split(':')[1])      #此处eval()用于取消文本的双引号
            ilt.append([price,title])               #将price,和title加到ilt列表末尾
    except:
        print("错误")

\#进行打印
def printGoodsList(ilt):
    tplt = "{:4}\t{:8}\t{:16}"                  #定义字符串格式
    print(tplt.format("序号","价格","商品名称"))
    count = 0
    for g in ilt:
        count = count+1
        print(tplt.format(count,g[0],g[1]))    #按给定格式逐行输出

def main():
    goods ='书包'
    depth = 2
    start_url = 'https://s.taobao.com/search?q='+goods
    infoList = []
    for i in range(depth):
        try:
              #str函数的作用是将你其中的内容转换为字符串
              url = start_url + '&s='+str(44*i)
              #第二页网址为https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&s=44
              html = getHTMLText(url)
              parsePage(infoList,html)
        except:
              continue
    printGoodsList(infoList)


main()

了解几个知识点

1、eval用法

https://blog.csdn.net/together_cz/article/details/72640276

2、findall用法

https://www.cnblogs.com/xieshengsen/p/6727064.html

追加:

\s匹配任意的空白符(包括空格,制表符(Tab),换行符,中文全角空格)
\S则是任意不是空白符的字符
?涉及到贪婪模式
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)
3、split
Python split()方法
Python 字符串 Python 字符串
描述—-Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串
语法
split() 方法语法:—–str.split(str=”“, num=string.count(str)).
参数
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。
返回值—-返回分割后的字符串列表。

4、append()
描述—–Python 列表 append() 方法用于在列表末尾追加新的对象。
语法—–L.append(obj)
参数—–obj – 追加到列表末尾的对象。
返回值–该方法无返回值,但会在原来的列表末尾追加新的对象。

新手记录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值