js 爬虫抓取网页数据(静态网页爬取文章目录(一):蚂蚁、自动索引、模拟程序或者蠕虫)
优采云 发布时间: 2022-03-04 11:20js 爬虫抓取网页数据(静态网页爬取文章目录(一):蚂蚁、自动索引、模拟程序或者蠕虫)
静态网页抓取
文章目录
前言
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中更常称为网络追逐者)是根据一定规则自动从万维网上爬取信息的程序或脚本。其他不太常用的名称是 ant、autoindex、emulator 或 worm。.
一、静态网站分析
示例网站:
任务要求:
第一步获取主要食物类别
第二步,获取所有分类中的所有分页成分
第三步,获取所有分类的所有分页成分的营养成分和营养比例
二、需要的依赖和插件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 是一个可编程的无头浏览器。
Headless browser:一个完整的浏览器内核,包括js解析引擎、渲染引擎、请求处理等,但不包括显示和与用户交互的浏览器。
2.PhantomJS 使用场景
PhantomJS 的适用范围是无头浏览器的适用范围。通常无头浏览器可用于页面自动化、网络监控、网络爬取等:
页面自动化测试:希望能自动登录网站做一些操作,然后检查结果是否正常。
网页监控:希望定期打开页面查看网站是否可以正常加载,加载结果是否符合预期。加载速度等等。
网络爬虫:获取js下载并渲染页面中的信息,或者使用js跳转后获取链接的真实地址。
———————————————
版权声明:本文为CSDN博主“violetgo”的原创文章,遵循CC4.0 BY-SA版权协议。转载请附上原文出处链接和本声明。
原文链接:
三、代码显示
第一步获取主要食物类别
使用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不请求数据。我们判断是最后一页,跳出这个类别,进入下一个类别。
<p>
#查询大类表
setsql = "SELECT * FROM p_food_type "
mycursor.execute(setsql)
myresult = mycursor.fetchall()
n = 100
sum = 0
counter = 1
#循环大类表
for x in myresult:
counter=1
while counter