另一个Python3简单的爬取数据的实例(1688)

这个实例的函数主体和Python3简单的爬取淘宝数据一样
就是目标网站从淘宝更换成了1688(因为发现淘宝没有原材料)

实现方式很简单,60行简单代码就能实现
主要是python的包库太过完善,我根本不需要什么语法知识,直接调用现成的函数就行了
1688也没有登陆访问限制
cookies那部分就可以删掉了

具体函数作用参照Python3简单的爬取淘宝数据

不同的地方在于他的编码了url而不直接用汉字(话说编码的网站更多吧)
噢,对爬到的页面进行的处理用bs4而不是正则
用的库也有所不同

使用软件

  • vscode
  • python3

用到的库

urllib //处理url用的库
requests //请求库
xlwt //excel处理库
bs4 //页面内容处理库

整体代码:

import urllib
import xlwt
from bs4 import BeautifulSoup
import requests

def writeExcel(ilt,name):
    if(name != ''):
        count = 0
        workbook = xlwt.Workbook(encoding= 'utf-8')
        worksheet = workbook.add_sheet('temp')
        worksheet.write(count,0,'序号')
        worksheet.write(count,1,'价格')
        worksheet.write(count,2,'名称')
        for g in ilt:
            count = count + 1
            worksheet.write(count,0,count)
            worksheet.write(count,1,g[0])
            worksheet.write(count,2,g[1])
        workbook.save(name+'.xls')
        print('已保存为:'+name+'.xls')
    else:
        printGoodsList(ilt)

def getHTMLText(url):
    kv = {'user-agent':'Mozilla/5.0'}
    try:
        r = requests.get(url,headers=kv, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
     
def parsePage(ilt, html):
    try:
        bf = BeautifulSoup(html, 'html.parser')
        price = bf.find_all(attrs={'click-item':"price"})
        title = bf.find_all(attrs={'click-item':"title"})
        for i in range(len(price)):
            ilt.append([price[i].text,title[i].text])
    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 = input('搜索商品:')
    depth = int(input('搜索页数:'))
    name = input('输入保存的excel名称(留空print):')
    start_url = 'https://www.1688.com/chanpin/-.html?spm=a261b.2187593.searchbar.2.oUjRZK&keywords=' + urllib.parse.quote(goods,safe='/',encoding='gb2312')
    infoList = []
    print('处理中...')
    for i in range(depth):
        try:
            url = start_url + '&beginPage=' + str(i+1)
            html = getHTMLText(url)
            parsePage(infoList, html)
            print('第%i页成功...' %(i+1))
        except:
            continue
    writeExcel(infoList,name)
    print('完成!')

main()

讨论

很简单的小程序,回看淘宝好像这个更适合练手的样子

还有很多要改进的地方:

  • 用数据库代替xlwt写入excel(对于少量数据excel可能方便一点
  • 尝试Xpath替代bs4(听说xpath比bs4好用?

你可能感兴趣的:(另一个Python3简单的爬取数据的实例(1688))