静态网页爬取

文章目录

  • 静态网页爬取
  • 前言
  • 一、静态网站分析
  • 二、所需要的依赖和插件
    • 1.引入库
  • 三、代码展示
  • 四、感谢大家今天就到此为止随时欢迎学习交流

前言

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。。


一、静态网站分析

例子网站:http://fitness.39.net/food/

任务要求:
第一步获取食物的大类

第二步获取所有大类里面所有分页的食材

第三步获取所有大类里面所有分页食材的营养成分和营养占比

二、所需要的依赖和插件

1.引入库

代码如下(示例):

from asyncio.windows_events import NULL
import requests
import mysql.connector
import datetime
from lxml import etree
from bs4 import BeautifulSoup
from selenium import webdriver

插件:phantomjs.exe
插件:XPath
插件介绍:
PhantomJS是一个可编程的无头浏览器.

无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器。

2.PhantomJS的使用场景
PhantomJS的适用范围就是无头浏览器的适用范围。通常无头浏览器可以用于页面自动化,网页监控,网络爬虫等:

页面自动化测试:希望自动的登陆网站并做一些操作然后检查结果是否正常。
网页监控:希望定期打开页面,检查网站是否能正常加载,加载结果是否符合预期。加载速度如何等。
网络爬虫:获取页面中使用js来下载和渲染信息,或者是获取链接处使用js来跳转后的真实地址。
————————————————
版权声明:本文为CSDN博主「violetgo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/violetgo/article/details/48105593

三、代码展示

第一步获取食物的大类
用XPath插件找到需要爬取的html组件

response = requests.get(url="http://fitness.39.net/food/")
response.encoding = 'utf-8'# 获取一级分类的数据
html = etree.HTML(response.text)
print(html.xpath("//dl[@id='food_ele_dl_id']//dd//a" ))
items = html.xpath("//dl[@id='food_ele_dl_id']//dd//a" )data_time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") #系统时间
val = []
val1 = []
# 遍历items的集合
for item in items:title = "".join(item.xpath("./@title"))href = "".join(item.xpath("./@href"))val.append((title,href,data_time))
# print(html.xpath("" ))
print(val)mydb = mysql.connector.connect(host="11.11.11.111",user="root",passwd="123456",database="python"
)mycursor = mydb.cursor()#删除旧的食材分类数据
sql = "DELETE FROM p_food_type "mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, " 条记录删除")#插入新数据
sql = "INSERT INTO p_food_type (title, url,create_time) VALUES (%s, %s, %s)"mycursor.executemany(sql, val)mydb.commit()    # 数据表内容有更新,必须使用到该语句print(mycursor.rowcount, "记录插入成功。")



第二步获取大类里面所有的小类包括分页
分析一下分页如何搞定
举例以谷物分析


通过图片我们可以找到分页的规律。
那么我们可以通过循环大类的url并拼接成分页的url去请求数据直到拼接的url请求不到数据我们判定为是最后一页而跳出本次大类进入下一大类。


#查询大类表
setsql = "SELECT * FROM p_food_type "
mycursor.execute(setsql)
myresult = mycursor.fetchall()     n = 100sum = 0
counter = 1
#循环大类表
for x in myresult:counter=1while counter <= n:# 分页的处理print(x[2])sun=x[2]s1=list(sun) print (s1[-6])s1[-6]=str(counter)s=''.join(s1)print("我是分页链接"+s)#请求分页链接 response = requests.get(url=s)response.encoding = 'utf-8'# 获取一级分类的数据# print(response.text)html = etree.HTML(response.text)# 获取当前分页链接的所有食材items = html.xpath("//ul[@id='sort_list_show']/li/a" )print(items)# 判断当前分页是不是有食材没有的话直接跳出循环进入下一个大类的循环if items==[]:breakdata_time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") #系统时间# 遍历当前分页所有的食材for item in items:val1=[]# 获取当前食材的名字和链接title = "".join(item.xpath("./@title"))href = "".join(item.xpath("./@href"))print(href)print(title)#判断食材名字不为空  if title!="" or title!=NULL:#这是大类的名字  print("我在这里"+x[1])# 请求食材的url进入当前食材的详情页面response2 = requests.get(url=href)response2.encoding = 'utf-8'#  print(response2.text)# 下面就是获取当前食材的营养成分和占比html2 = etree.HTML(response2.text)items2 = html2.xpath("//div[@class='ck-show']//ul//li/i" )#别名  nameb="".join(html2.xpath("//span[@class='title-left']/text()"))# 减肥指数jfzs="".join(html2.xpath("//span[@class='ju-box']/cite/text()"))print(jfzs)#有利yl=  "".join(html2.xpath("//span[@class='ju']/p[1]/text()"))print(yl)#无利wl  ="".join(html2.xpath("//span[@class='ju']/p[2]/text()"))print(wl)#gi值gi   ="".join(html2.xpath("//span[@class='gi']/b/text()"))print(gi)# 卡路里占比经过js计算所以xpath的方式获取不到咱们就用phantomjs.exe插件获取browser = webdriver.PhantomJS(executable_path=r'D:\\python\\phantomjs.exe')browser.get(href)html = browser.page_sourcesoup = BeautifulSoup(html, 'lxml')# 这是phantomjs.exe获取组件的方式和xpath有所不同# 卡路里百分比kll=soup.find('div',{'class':"bing"}).findAll('td')#脂肪占比#  zfzb=  "".join(html2.xpath("//span[@class='down']/text()"))p1,p2,p3=kll[1].get_text().partition('%')zfzb=p1+p2print(zfzb)#碳水化合物占比#  tshhw=  "".join(html2.xpath("//span[@class='up']/text()"))p1,p2,p3= kll[4].get_text().partition('%')tshhw=p1+p2print(tshhw)#蛋白质#  dbz  =  "".join(html2.xpath("//div[@class='bing']//table//tbody/tr[4]/td[2]/text()"))p1,p2,p3=kll[7].get_text().partition('%')dbz=p1+p2print(dbz)print(nameb)v0 = "".join(items2[0].xpath("./text()"))print(v0)v30 = "".join(items2[30].xpath("./text()"))if v30=="":items2[30]="-"print(items2[30])v31 = "".join(items2[31].xpath("./text()"))if v31=="":items2[31]="-"print(items2[31])val1.append((x[1],title,href,data_time,"".join(items2[0].xpath("./text()")),"".join(items2[1].xpath("./text()")),"".join(items2[2].xpath("./text()")),"".join(items2[3].xpath("./text()")),"".join(items2[4].xpath("./text()")),"".join(items2[5].xpath("./text()")),"".join(items2[6].xpath("./text()")),"".join(items2[7].xpath("./text()")),"".join(items2[8].xpath("./text()")),"".join(items2[9].xpath("./text()")),"".join(items2[10].xpath("./text()")),"".join(items2[11].xpath("./text()")),"".join(items2[12].xpath("./text()")),"".join(items2[13].xpath("./text()")),"".join(items2[14].xpath("./text()")),"".join(items2[15].xpath("./text()")),"".join(items2[16].xpath("./text()")),"".join(items2[17].xpath("./text()")),"".join(items2[18].xpath("./text()")),"".join(items2[19].xpath("./text()")),"".join(items2[20].xpath("./text()")),"".join(items2[21].xpath("./text()")),"".join(items2[22].xpath("./text()")),"".join(items2[23].xpath("./text()")),"".join(items2[24].xpath("./text()")),"".join(items2[25].xpath("./text()")),"".join(items2[26].xpath("./text()")),"".join(items2[27].xpath("./text()")),"".join(items2[28].xpath("./text()")),"".join(items2[29].xpath("./text()")),items2[30],items2[31],"".join(items2[32].xpath("./text()")),"".join(items2[33].xpath("./text()")),"".join(items2[34].xpath("./text()")),"".join(items2[35].xpath("./text()")),"".join(items2[36].xpath("./text()")),"".join(items2[37].xpath("./text()")),"".join(items2[38].xpath("./text()")),"".join(items2[39].xpath("./text()")),"".join(items2[40].xpath("./text()")),"".join(items2[41].xpath("./text()")),"".join(items2[42].xpath("./text()")),"".join(items2[43].xpath("./text()")),nameb,jfzs,yl,wl,gi,zfzb,tshhw,dbz))print(val1)else:breakcounter += 1

四、感谢大家今天就到此为止随时欢迎学习交流

python-静态网页爬取相关推荐

  1. python手机壁纸超清_详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  2. python壁纸高清图片_详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  3. 第二十八篇 网页实战之静态网页爬取,四大案例,小说,书,图片等抓取操作

    心得:不知道从什么时候开始,喜欢上了思考,完全可以把自己沉浸在自己的程序中,看着自己一点点的累积,慢慢的成长,证明这一天没有白白浪费掉,感谢还在认真的你. 自己在学习过程中总结出来的爬虫的过程: 1. ...

  4. 静态网页爬取-Requests

    静态网页爬取-Requests import requests r=requests.get('http://www.baidu.com/') print(r.encoding) print(r.st ...

  5. mac如何用python爬网页数据_Mac——利用Python进行网页爬取

    Mac--利用Python进行网页爬取 目标:利用Python爬取网页中的指定内容,例如,爬取百度百科网页中四川省的别名.html 输出:四川省的别名为:川.蜀.天府之国python 我的经验,网页爬 ...

  6. Python爬虫快速入门,静态网页爬取!

    在开始之前,请确保你的电脑上已经安装好了BeautifulSoup库,可以通过在命令行中输入pip install beautifulsoup4来进行安装. 一.数据解析 在爬取之前,我们需要检测下响 ...

  7. Python 单网页爬取

    目录 任务描述 相关知识 网络爬虫 网络爬虫:载入 网络爬虫:动态载入 网络爬虫:解析 编程要求 测试说明 任务描述 本关任务:编写一个爬虫,爬取 www.jd.com 网的 title. 相关知识 ...

  8. 【Python】网页爬取CVPR论文

    动机 利用python自动下载 cvpr论文 流程 获取网页内容 找到所有论文链接 下载 1. 获取网页内容 所用模块:requests 重要函数:requests.get 输出:web_contex ...

  9. beautifulsoup网页爬虫解析_Python爬虫快速入门,静态网页爬取

    在开始之前,请确保你的电脑上已经安装好了BeautifulSoup库,可以通过在命令行中输入pip install beautifulsoup4来进行安装. 一.数据解析 在爬取之前,我们需要检测下响 ...

  10. Python简单数据处理(静态网页爬取,jupter实现)

    对于哔哩哔哩动漫排行榜网页信息的爬取及处理(静态网页) 1.数据来源: 哔哩哔哩排行榜 2.数据描述: 利用python的第三方库requests对网页进行爬取 利用re库提供的正则表达式对网页数据进 ...

最新文章

  1. python使用matplotlib可视化条形图、使用barh函数可视化条形图(使用barh函数可视化多分类的并行条形图、side by side)
  2. 深度学习中,Batch_Normalization加速收敛并提高正确率的内部机制
  3. 黄了。Google中国版搜索
  4. [Trie] Luogu P2580 于是他错误的点名开始了
  5. Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件
  6. 洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】
  7. 二叉树题目---3 另一个树的子树 AND 二叉树最大深度
  8. aws数据库同步区别_了解如何通过使用AWS AppSync构建具有实时数据同步的应用程序
  9. 算法入门篇四 桶排序
  10. java 获取类方法_Java之反射机制三:获取类的方法
  11. Qt工作笔记-代理及自定义委托,实现开关功能
  12. 腾讯32款游戏退市,只因为这个理由!
  13. tf-openpose人体姿态估计标签生成--heatmap--vectormap
  14. Impala ODBC 安装笔记
  15. Advanced Object Creation(JS,翻译MSDN文章)
  16. command对象提供的3个execute方法是_【面试题】面向对象编程篇-01
  17. 工程图字体宋体仿宋_宋黑仿变各种字体的审美禀赋
  18. matlab 取数组第一行,matlab中如取数组的矩阵的一行出来成为一个向量?
  19. 国家、省、市、区四联动效果
  20. 南京信息工程大学计算机考研怎么样,南京信息工程大学就业怎么样,考研好不好?...

热门文章

  1. 利用webmagic爬去招聘信息,并输入到Hbase数据库中
  2. 机器学习学习整理(二)对数几率回归与支持向量机
  3. C语言试题八十六之兔子生兔子问题
  4. 怎么用python画四叶草_如何使用python绘图四叶草
  5. 苹果手机怎么连接蓝牙耳机_QCY蓝牙耳机 T5在苹果IOS和安卓手机上的延迟对比
  6. isbn号码 (java实现)
  7. SprngBoot引用外部jar包和本身日志接口冲突问题解决办法
  8. VOIP技术的专业性网站
  9. 分布式计算、并行计算、网格计算
  10. setPositiveButton和setNegativeButton