鱼C论坛

 找回密码
 立即注册
查看: 1854|回复: 9

[已解决]python爬虫中的一些步骤和函数不懂,求助

[复制链接]
发表于 2023-4-5 20:39:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.
plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)  #观察源代码找到商品名称以及价格所在地,设计出正则表达式提取出商品名称以及价格。
tlt=re.findall(r'\"raw_title\"\:\".*?\"',html)
上面语句中\"view_price\"\:\"[\d\.]*\"和\"raw_title\"\:\".*?\"是什么意思?
2.
ilt是什么,为什么能追加列表?
ilt.append([price,title])
3.
tplt = "{:4}\t{:8}\t{:16}"
{:4}\t{:8}\t{:16}是什么意思?
4.
tplt.format("序号","价格","商品名称")是什么意思?
5.
  url = start_url + '&s=' + str(44 * i)  # 44是淘宝每个页面呈现的宝贝数量
上面语句中str(44 * i)是什么意思?
6.
  printGoodsList(info_list)
为什么不直接打印get_html_text(url)?
import requests
import re
def get_html_text(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}   #爬虫头部伪装成浏览器头部,方便get到url
    try:
        coo = 'enc=edIQzA1s26222kIGPuWoQhOkbyCImebd7jSn9F1VH%2BCfHYhI990ZpdBlP%2BMdRMk%2FK8mn3FU0JuGv6BfrOiP4qA%3D%3D; cna=p2KZE5ukfyICAXLy+m8tZU45; tracknick=tb31958717; miid=2128311241709186772; thw=cn; _m_h5_tk=33f962b2a85bc7e874dbb0178f2eff1c_1676964628850; _m_h5_tk_enc=ef5d599f7fff2daccf9a943237997412; cookie2=1399a2d34e311507a2529ce8a75d185a; t=931dfb62f5d2fbc3f5e6cb718693b3d9; _tb_token_=36aa41ddb37be; _samesite_flag_=true; xlly_s=1; sgcookie=E100oSa2nHs6sQV0oikjf8gT8t4BsM7%2BViiKLUxvIx89jh4UgHRUpqUWG7V0UR3YBreBqYf6ZiuUmLBkgxGYd1z%2F3OOBQ5imIC6Zz0RHa6sEFwnPNtl8c%2BukNwolwoeTeF0q; unb=2655240623; uc3=nk2=F5RGNwFaZxrxHA%3D%3D&lg2=UtASsssmOIJ0bQ%3D%3D&vt3=F8dCvjygh3rUQwBF1HI%3D&id2=UU6kVqVyXyokyA%3D%3D; csg=93901321; lgc=tb31958717; cancelledSubSites=empty; cookie17=UU6kVqVyXyokyA%3D%3D; dnk=tb31958717; skt=a8aa5eb3bd48dd3c; existShop=MTY3Njk1NzQ3MA%3D%3D; uc4=nk4=0%40FY4NAqWJh2BvMr10d8W8Zo1Ndzhd&id4=0%40U2xpVFuqNqzkZAcqk4j%2BxmUJPPVY; _cc_=UIHiLt3xSw%3D%3D; _l_g_=Ug%3D%3D; sg=734; _nk_=tb31958717; cookie1=WvdGPl146UxKEGunckTeCsH8Q6XWriJKenzrlFwDsKs%3D; mt=ci=38_1; uc1=cookie15=U%2BGCWk%2F75gdr5Q%3D%3D&cookie16=VFC%2FuZ9az08KUQ56dCrZDlbNdA%3D%3D&cookie14=UoezScZpUrVgyw%3D%3D&existShop=false&pas=0&cookie21=V32FPkk%2FgihF%2FS5nr3O5; tfstk=cVqNBVt5WGINnHyAwDm4zxMsQdxOaDnm2BkjSsi_SUlfMp0IasVMMvxzq2uWLI0G.; l=fBjUvy8lgx5DTSn3KO5BPurza77TuIRb8ZVzaNbMiIEGa6sl1FGpLNCeyiVXRdtjgTCDoExPDzebsdhy-wUdgmyD-Jk_7qConxvtaQtJe; isg=BCwsaoGzYwvVtElPLfW7tDtR_Qpe5dCPD13ae4Zt5Fd6kc2bofTZH3hnsVkpNgjn'
        cookies = {}
        for line in coo.split(';'):  # 浏览器伪装 同样是为了成功爬取页面
            name, value = line.strip().split('=', 1)
            cookies[name] = value
        r = requests.get(url, cookies=cookies, headers=headers, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        print(r.text)
        return r.text
    except:
        return ''


def parsePage(ilt,html):
    try:
        plt=re.findall(r'"view_price"\:"[\d\.]*"',html)  #观察源代码找到商品名称以及价格所在地,设计出正则表达式提取出商品名称以及价格。
        tlt=re.findall(r'"raw_title"\:".*?"',html)
        for i in range(len(plt)):
            price=eval(plt[i].split(":")[1])
            title=eval(tlt[i].split(":")[1])
            ilt.append([price,title])
    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]))
    print("")

    
def main():
    goods="书包"
    depth=1
    start_url="https://s.taobao.com/search?q="+goods
    info_list = []
    for i in range(depth):
        try:
            url = start_url + '&s=' + str(44 * i)  # 44是淘宝每个页面呈现的宝贝数量
            html = get_html_text(url)
            parsePage(info_list, html)
        except:
            continue
    printGoodsList(info_list)


main()
最佳答案
2023-4-5 20:43:16
1、在这里,正则表达式\"view_price\"\:\"[\d\.]*\" 和 \"raw_title\"\:\".*?\"用于从HTML源代码中提取商品价格和标题。其中:

  • \"view_price\"\:\"[\d\.]*\":匹配"view_price":"数字或点"这样的格式。[\d\.]*表示数字或点的重复0次或多次。
  • \"raw_title\"\:\".*?\":匹配"raw_title":"任意字符"这样的格式。.*?表示任意字符的重复0次或多次,但是以最小重复次数为准。


2、ilt是一个列表,用于存储解析后的商品价格和标题信息。ilt.append([price, title])将商品价格和标题作为一个列表追加到ilt列表中。

3、{:4}\t{:8}\t{:16}表示用于格式化字符串的模板。其中,{:4}、{:8}、{:16}分别表示占用4个、8个、16个字符宽度的占位符,\t是制表符,用于分隔各个占位符。

4、tplt.format("序号", "价格", "商品名称")是将字符串模板tplt中的占位符替换为指定的值。这里将第一个占位符替换为"序号",第二个替换为"价格",第三个替换为"商品名称"。

5、str(44 * i)表示将整数44 * i转换为字符串。这里44表示淘宝每个页面显示的商品数量,i是循环变量。通过这个表达式,可以计算出每个页面的起始商品索引。

6、printGoodsList(info_list)打印格式化后的商品列表,而不是直接打印get_html_text(url),因为get_html_text(url)只是HTML源代码,不便于阅读。通过解析和格式化,我们可以清晰地看到每个商品的序号、价格和名称。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-5 20:43:16 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +20 鱼币

1、在这里,正则表达式\"view_price\"\:\"[\d\.]*\" 和 \"raw_title\"\:\".*?\"用于从HTML源代码中提取商品价格和标题。其中:

  • \"view_price\"\:\"[\d\.]*\":匹配"view_price":"数字或点"这样的格式。[\d\.]*表示数字或点的重复0次或多次。
  • \"raw_title\"\:\".*?\":匹配"raw_title":"任意字符"这样的格式。.*?表示任意字符的重复0次或多次,但是以最小重复次数为准。


2、ilt是一个列表,用于存储解析后的商品价格和标题信息。ilt.append([price, title])将商品价格和标题作为一个列表追加到ilt列表中。

3、{:4}\t{:8}\t{:16}表示用于格式化字符串的模板。其中,{:4}、{:8}、{:16}分别表示占用4个、8个、16个字符宽度的占位符,\t是制表符,用于分隔各个占位符。

4、tplt.format("序号", "价格", "商品名称")是将字符串模板tplt中的占位符替换为指定的值。这里将第一个占位符替换为"序号",第二个替换为"价格",第三个替换为"商品名称"。

5、str(44 * i)表示将整数44 * i转换为字符串。这里44表示淘宝每个页面显示的商品数量,i是循环变量。通过这个表达式,可以计算出每个页面的起始商品索引。

6、printGoodsList(info_list)打印格式化后的商品列表,而不是直接打印get_html_text(url),因为get_html_text(url)只是HTML源代码,不便于阅读。通过解析和格式化,我们可以清晰地看到每个商品的序号、价格和名称。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:52:06 | 显示全部楼层

回帖奖励 +20 鱼币

本帖最后由 sfqxx 于 2023-4-5 20:54 编辑

1.

\"view_price\"\:\"[\d\.]*\"和\"raw_title\"\:\".*?\"是正则表达式,用于匹配字符串。其中:

- \"view_price\"\: 匹配字符串中以"view_price"开头的部分
- [\d\.]* 匹配0个或多个数字或小数点
- \"raw_title\"\: 匹配字符串中以"raw_title"开头的部分
- .*? 匹配任意字符(除\n外)0次或多次,非贪婪模式

2. ilt是一个空列表,可以通过append()方法在列表末尾追加元素。

3. "{:4}\t{:8}\t{:16}"是一个字符串格式化模板,其中:

- {}中的数字表示要替换的参数所在位置
- :后面的数字表示该参数所占的字符宽度
- \t表示一个制表符

4. tplt.format("序号","价格","商品名称")是将"序号"、"价格"、"商品名称"这三个参数传入字符串格式化模板中,生成新的字符串。

5. str(44 * i)是将整数44乘以变量i的值,然后将结果转换为字符串类型。

6. get_html_text(url)只是获取URL页面的HTML源代码,并没有提取出需要的商品信息,因此需要调用parsePage()函数进行信息提取,再由printGoodsList()函数打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:55:10 | 显示全部楼层

回帖奖励 +20 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-5 21:05:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 21:33:18 From FishC Mobile | 显示全部楼层

回帖奖励 +20 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-5 23:50:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-6 11:44:04 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-7 00:15:39 | 显示全部楼层
66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-11 08:54:45 | 显示全部楼层
感激,学到了学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 03:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表