一、数据爬取
1.分析网页链接
界面截图:
主要爬取目标是网页中的生猪相关价格信息,首先分析一下网页的请求链接。
构造规则为:INDEX_URL+sort=2&s_id=0&c_id=1&cou_id=0&city_id=3136&mid=&lx=0&page=2
其中sort_id对应的是不同产品(生猪、仔猪等)代码,c_id后对应的是省份代码。根据这两点可以抓取各省每日生猪、仔猪、玉米等相关产品的报价。
2.分析网页源代码
接着对网页源代码进行分析,找到我们要抓取的数据究竟在哪。
打开网页开发工具,发现网页数据在源代码中直接加载出来,没有做一些加密或反爬处理:
可以看到,我们需要的数据都存在tbody节点中,其每个子节点中包含一行数据,每个数据都保存在一个td节点中。OK,定位了数据的位置可以开始编写代码了。
3.实例代码:
基本思路:
①使用requests请求页面
②使用Xpath进行解析
③将数据保存到mysql数据库中
#!/usr/bin/env python
# coding: utf-8
import requests
from lxml import etree
import pymysql
import datetime
import sys
date=datetime.datetime.now().date()#获取当日日期
#定义一个通用的爬取页面的方法
def scrape_index(url):
global date
result0=[]
response=requests.get(url)
html = etree.HTML(response.text)
for j in range(3,33):
result=[]
result1=html.xpath('//tbody[1]/tr[{j}]/td[position()<6]/a/text()'.format(j=j))
if str(date)!= str(result1[0]):#核对日期,只抓取本日数据
break
result.append(result1)
result2=html.xpath('//tbody[1]/tr[{j}]/td/a/li[1]/text()'.format(j=j))
result.append(result2)
result=[n.replace('\xa0','').replace(' ','') for a in result for n in a ]
result0.append(result)
return result0
#定义保存数据到mysql数据库的方法
def save_data(data):
db = pymysql.connect(host="localhost", user="*****", password='******', database="pigprice",charset="utf8")
cursor = db.cursor()
for i in range(len(data)):
sql = "insert into pigprice.pig_price (date,province,city,product,varieties,price) values ('{a}','{b}','{c}','{d}','{e}','{f}')".format(a=data[i][0],b=data[i][1],c=data[i][2],d=data[i][3],e=data[i][4],f=data[i][5])
cursor.execute(sql)
db.commit()
db.close()
if __name__=="__main__":
#生猪
for i in range(1,11):
#后面将项目部署到服务器上每日定时执行,这里只抓取前十页的数据就足够了。
url="INDEX_URL+sort=2&s_id=0&c_id=9&cou_id=0&city_id=0&mid=&lx=0&page={i}".format(i=i)
result_pig=scrape_index(url)
if result_pig:
save_data(result_pig)
print('今日生猪数据爬取完成')
sys.exit()
二、项目部署
1.服务器选择
为了方便,云服务器是个不错的选择。我用的是阿里云的轻量应用云服务器,海外版的相对便宜点,使用中确实能感受到比较明显的延迟,不过对这种小实例来说足够用了。
2.项目部署
服务器的初步配置和使用论坛中有许多博客都进行了讲解,这里不再赘述。进入云服务器,建议使用宝塔面板,操作较为简单。进入宝塔界面,接着安装好mysql数据库和python项目管理器:
将代码文件上传到服务器,然后进入python项目管理器,点击添加项目,配置好相关设置:
点击确定后试运行一下,查看日志,确定代码可以正常运行后就可以暂停了。
3.定时爬取
进入计划任务界面,添加计划任务:
设置好之后服务器就会在每天固定时间运行爬虫代码了,进入任务日志可以查看任务运行情况: