python爬虫 + 导出到csv表格

# encoding:utf-8
import re  # 使用正则 匹配想要的数据
import requests  # 使用requests得到网页源码
import csv
import time

# 得到主函数传入的链接
def getHtmlText(url):
    try:  # 异常处理
        #伪装头部,虽然不伪装也可以,但是有时会导致服务器未响应,访问多了需要更换ip
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                                 'Chrome/51.0.2704.63 Safari/537.36'}
        #  得到你传入的URL链接  设置超时时间3秒
        r = requests.get(url=url, headers=headers, timeout=3)
        # 判断它的http状态码
        r.raise_for_status()
        # 设置它的编码 encoding是设置它的头部编码 apparent_encoding是从返回网页中分析它的编码格式
        r.encoding = r.apparent_encoding
        # 返回源代码
        return r.text
    except: # 发生异常返回空
        return ''

# 解析你的网页信息
def parsePage(ilt, html, goods):
    # 异常处理
    try:
        #运用正则表达式匹配
        # 找到商品的价格
        plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
        # 找到商品的名称
        tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
        # 找到商品的发货地址
        add = re.findall(r'\"item_loc\"\:\".*?\"', html)
        #nid,用于生成商品的详情页链接:"https://item.taobao.com/item.htm?id=" + nid 则得到详情页
        nid = re.findall(r'\"nid\"\:\"[\d]*\"', html)
        # 找到商品的图片链接
        img = re.findall(r'\"pic_url\"\:\".*?\"', html)
        # 月销量
        sales = re.findall(r'\"view_sales\"\:\".*?\"', html)
        # 得到这个内容放入主函数中的列表
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])
            title = eval(tlt[i].split(':')[1])
            addr = eval(add[i].split(':')[1])
            nids = eval(nid[i].split(':')[1])
            imgs = eval(img[i].split(':')[1])
            sale = eval(sales[i].split(':')[1])
            ilt.append([title, goods, price, sale, 'https://item.taobao.com/item.htm?id='+nids, imgs, addr])
    except:  # 发生异常输出空字符串
        print('')

# 定义主函数 main
def main():
    csvfile = open('goods.csv', 'w', newline='')  #打开一个goods.csv的文件进行数据写入,没有则自动新建
    writer = csv.writer(csvfile)
    writer.writerow(['商品名称', '搜索的关键字', '价格', '月销量', '详情页链接', '图片链接', '发货地']) #写入一行作为表头
    goods_list = ['男装','衬衫','羽绒服','毛衣','T恤','皮衣','牛仔裤','休闲裤','情侣装'] #加的越多循环越久,爬取的数据越多
    for i in range(len(goods_list)):    #循环实现挨个搜索爬取并输出到csv
        goods = goods_list[i] # 你要搜索的东西
        print("正在爬取的商品名称:"+goods)
        depth = 2  # 你想要得到几页的东西
        start_url = 'https://s.taobao.com/search?q=' + goods  # 你搜索的网址加上你的搜索东西
        infoList = [] # 自定义的空列表用来存放你的到的数据
        for i in range(depth): # 循环你的页数
            try: # 异常处理
                url = start_url + '&s' + str(44 * i) # 得到你的网址,一页44个商品
                html = getHtmlText(url) # 得到url传入到你要得到url的函数中
                parsePage(infoList, html, goods) # 得到你的html源码 放入解析的网页中
            except: # 发生异常跳过
                continue
        # 把list中的数据放入goods.csv中
        writer.writerows(infoList)
        time.sleep(3)  # 休眠3秒
    csvfile.close() #循环结束,数据爬取完成,关闭文件

main() # 调用主函数
发布了51 篇原创文章 · 获赞 44 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/vpqtxzmzezeqjj9977/article/details/80376238
今日推荐