python批发_python实战成功爬取海外批发商价格信息并写入记事本

运行平台:windows

Python版本:Python 3.7.0

用到的第三方库:requests ,Beautiful Soup,re

IDE:jupyter notebook

浏览器:Chrome浏览器

思路:

1.查看网页源代码

2.抓取单页内容

3.Beautiful Soup解析网页内容并提取有用信息

4.把全站有用信息写入文件

1.查看网页原代码

按F12查看网页源代码发现每一个商品的信息都在“

”标签之中。

11985d9200f03317f0fce9a5c020070b.png

点开之后信息如下

1bade0bccf76969a9d64d66b89570699.bmp

78b0fcdcaacc70afa00c39ee27f5e8f6.png

二.抓取单页内容并写入记事本

接下来通过以下代码获取网页内所需数据并写入记事本

1 #!usr/bin/env python3

2 #-*- coding:utf-8 -*-

3 from bs4 import BeautifulSoup #网页解析库

4 import requests #网页请求库

5 import re #正则表达式

6 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'}#添加请求头防止反爬

7 response = requests.get('http://www.maxiconsumo.com/sucursal_capital/comestibles/aceites/aceite-girasol.html',headers = headers) #使用网页请求库打开网页

8 soup = BeautifulSoup(response.text,"lxml") #使用BeautifulSoup解析网页

9 lis = soup.find('ul',class_='products-grid unstyled thubmnails products').find_all('li') #在解析的网页检测class元素为products-grid...下的li标签

10 msg = '{}\n商品名称:{}\n含税价格:{}\n免税价格:{}\n' #创建写入记事本内容

11 goods_list = [] #创建空列表

12 for li in lis: #遍历所有li标签内的内容

13 codigo = li.find('span',class_='sku').text.strip() #在遍历的内容内查找span标签下的sku的codigo进行去除头尾空格得到codigo

14 title = li.find('h2',class_='product-name').text.strip()#在遍历的内容内查找h2标签下的roduct-name进行去除头尾空格得到商品名称

15 price_so = li.find_all('span',class_='price')[:2] #在遍历的内容内查找span标签下的price进行切片保留头两个价格

16 price1,price2 = [p.text.strip() for p in price_so] #通过for循环和去出头尾空格分别获得免税价格和含税价格

17 info = msg.format(codigo,title,price1,price2) #内容添加进记事本内

18 goods_list.append(info) #信息加入空列表内

19 print(codigo,title,price1,price2) #输出到控制台

20 with open('maxiconsumo.txt','a',encoding = 'utf-8') as file: #创建一个叫maxiconsumo.txt的文件

21 file.write('\n',join(goods_list)) #把列表内容写入文件

现在单页内容已经获取完毕

三.抓取全站价格

通过对网页的分析可以发现官网对所有的商品进行分类并且可以通过首页进入任何商品网页

cc105a9634477d6aa1b7d390832359e9.png

那么我只要抓取首页内商品分类的超链接就可以进入所有网页并收集信息代码如下

1 from bs4 import BeautifulSoup #网页解析库

2 import requests #网页请求库

3 importre4 res = requests.get('http://www.maxiconsumo.com',headers = headers) #打开首页

5 sou = BeautifulSoup(res.text,"lxml")#解析网页

6 pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+') #创建收集链接的正则

7 index_lis = str(sou.find_all(class_="subcat")) #查找解析网页内subcat保存超链接的元素

8 product_url = re.findall(pattern,index_lis) #使用正则匹配获取subcat内超链接清洗获得超链接

9 for url in product_url: #for循环出来超链接

10 print(url) #控制台输出

通过代码输出得到以下内容

b15d02ac0d60f4639e8cfb6d0f940723.png

有了所有内容的网页链接后就可以开始封装了源代码如下

1 #!usr/bin/env python3

2 #-*- coding:utf-8 -*-

3 from bs4 import BeautifulSoup #网页解析库

4 import requests #网页请求库

5 import re #正则表达式

6 defget_one_page(url,headers):7 response = requests.get(url,headers = headers) #使用网页请求库打开网页

8 soup = BeautifulSoup(response.text,"lxml") #使用BeautifulSoup解析网页

9 try:10 lis = soup.find('ul',class_='products-grid unstyled thubmnails products').find_all('li') #在解析的网页检测class元素为products-grid...下的li标签

11 msg = '{}\n商品名称:{}\n含税价格:{}\n免税价格:{}\n' #创建写入记事本内容

12 goods_list = [] #创建空列表

13 for li in lis: #遍历所有li标签内的内容

14 codigo = li.find('span',class_='sku').text.strip() #在遍历的内容内查找span标签下的sku的codigo进行去除头尾空格得到codigo

15 title = li.find('h2',class_='product-name').text.strip()#在遍历的内容内查找h2标签下的roduct-name进行去除头尾空格得到商品名称

16 price_so = li.find_all('span',class_='price')[:2] #在遍历的内容内查找span标签下的price进行切片保留头两个价格

17 price1,price2 = [p.text.strip() for p in price_so] #通过for循环和去出头尾空格分别获得免税价格和含税价格

18 info = msg.format(codigo,title,price1,price2) #内容添加进记事本内

19 goods_list.append(info) #信息加入空列表内

20 print(codigo,title,price1,price2) #输出控制台

21 with open('maxiconsumo.txt','a',encoding = 'utf-8') as file: #创建一个叫maxiconsumo.txt的文件

22 file.write('\n',join(goods_list)) #把列表内容写入文件

23 except:24 pass

25

26 defget_one_page_url(index,headers):27 res = requests.get(index,headers = headers) #打开首页

28 sou = BeautifulSoup(res.text,"lxml")#解析网页

29 pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+') #创建收集链接的正则

30 index_lis = str(sou.find_all(class_="subcat")) #查找解析网页内subcat保存超链接的元素

31 product_url = re.findall(pattern,index_lis) #使用正则匹配获取subcat内超链接清洗获得超链接

32 return product_url #返回链接

33

34 defmain():35 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'}#添加请求头防止反爬

36 index = 'http://www.maxiconsumo.com' #定义首页链接

37 page_url = get_one_page_url(index,headers) #传入参数

38 for i in page_url: #for 循环链接

39 url =i40 get_one_page(url,headers) #得到的链接传入需要爬的函数内

41

42 if __name__ == '__main__':43 main()

虽然代码不太严谨 但是基本功能都实现了

这里我就不把多进程的方式写出来  按目前代码大概爬取全网的数据也就十几分钟

不放多进程的原因就是不想给对方服务器造成过大的压力 ps:多进程任务相当于cc攻击

最后附上爬到大概内容图片

cc72fab892914bcdf6e526407384066a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值