程序员跨行帮朋友,python爬虫之饲料添加剂数据,采集+备份

梦想橡皮擦 2021-10-29 19:56:41
程序员 程序 朋友 跨行 行帮

作为一个程序员,经常接到一些实体行业朋友提出的奇妙需求,例如本博客,一个饲料添加剂行业的朋友,需要一点点资料,让我给他弄一份。

部分数据未公开,博客中仅公开部分数据。
本文由于数据请求方法是 POST ,恰好可以和 scrapy 学习相匹配

目标站点分析

本次要采集的站点是 食品安全信息查询平台-食安通(食品安全网),该页面数据如下所示。
程序员跨行帮朋友,python爬虫之饲料添加剂数据,采集+备份
经过测试得到的数据请求接口及参数如下:

# 请求地址
http://www.eshian.com/sat/feedadditive/index
# 请求方法:
POST
# 请求参数
pageNo: 2
eName:
feedadditiveindustryId: -1

接口中只有 pageNo 参数有用,其余参数保持默认值即可。

接口返回的数据为 HTML 格式,后续使用 XPath 进行提取。

编码时间

如果想实现 scrapy 发送 post 请求,需要重写 start_requests 方法,并且使用 scrapy.FormRequest() 实现对接口的调用。

爬虫文件代码如下所示

import scrapy
from scrapy.loader import ItemLoader
from siliao.items import SiliaoItem
class EshianComSpider(scrapy.Spider):
name = 'eshian_com'
allowed_domains = ['eshian.com']
start_urls = ['http://www.eshian.com/sat/feedadditive/index']
def start_requests(self):
for page in range(1, 2):
data = {

'pageN': str(page),
'eName': "",
'feedadditiveindustryId': "-1",
}
# 重写请求编写部分
yield scrapy.FormRequest(url=self.start_urls[0], formdata=data, callback=self.parse)
def parse(self, response):
target_trs = response.xpath('//tbody/tr')
for tr in target_trs:
l = ItemLoader(item=SiliaoItem(), selector=tr)
l.add_xpath("name", "./td[1]/text()")
l.add_xpath("s_type", "./td[2]/text()")
l.add_xpath("scope", "./td[3]/text()")
yield l.load_item()

由于使用 ItemLoader,所以需要改造一下 items.py 的代码:

import scrapy
from scrapy.loader.processors import TakeFirst
class SiliaoItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field(output_processor=TakeFirst())
s_type = scrapy.Field(output_processor=TakeFirst())
scope = scrapy.Field(output_processor=TakeFirst())

开启数据管道,修改 pipelines.py 文件代码,将文件保存到 CSV 文件中,同时需要注意开启 settings.py 文件中的相关配置。

import csv
from itemadapter import ItemAdapter
class SiliaoPipeline:
def __init__(self):
self.f = open("./siliao.csv", "a+", newline="")
self.fieldnames = ["name", "s_type", "scope"]
self.writer = csv.DictWriter(self.f, fieldnames=self.fieldnames)
self.writer.writeheader()
def process_item(self, item, spider):
self.writer.writerow(item)
return item
def close(self, spider):
self.f.close()

简单几行代码,就抓取完毕啦。
程序员跨行帮朋友,python爬虫之饲料添加剂数据,采集+备份
学习过程中控制一下 scrapy 的并发数,修改 settings.py 文件中的 CONCURRENT_REQUESTS = 4 配置即可。

写在后面

今天是持续写作的第 251 / 365 天。
期待 关注点赞评论收藏

更多精彩

《爬虫 100 例,专栏销售中,买完就能学会系列专栏》
程序员跨行帮朋友,python爬虫之饲料添加剂数据,采集+备份

↓ ↓ ↓ ↓一对一指导你的疑问↓ ↓ ↓ ↓
↓↓↓扫码添加博主参加【78技术人社群】~Python分部↓↓↓
版权声明
本文为[梦想橡皮擦]所创,转载请带上原文链接,感谢
https://dream.blog.csdn.net/article/details/121028282

  1. 请问这个实验如何做(用python3.x的环境)
  2. [algorithm learning] 1486. Array XOR operation (Java / C / C + + / Python / go / trust)
  3. Comment créer un programme Python pour simuler la réservation de sièges dans un cinéma
  4. Comment faire cette expérience (en utilisant l'environnement Python 3.x)
  5. Python之绘制多角星
  6. Pandas的SettingWithCopyWarning报警怎么解决
  7. Comment résoudre l'alarme de réglage avec copywarning de pandas
  8. 使用 Python 进行数据可视化之Matplotlib
  9. Python 常见问题 - 使用 poetry build 打包构建失败,报 ModuleOrPackageNotFound No file/folder found for package
  10. 万圣节奇妙夜,不给糖就捣蛋—Python带你点击解锁恐怖新道具(南瓜头、骷髅、蝙蝠、糖......)
  11. 【算法学习】1221. 分割平衡字符串(java / c / c++ / python / go / rust)
  12. 教你用Python 编写 Hadoop MapReduce 程序
  13. Je t'ai appris à écrire Hadoop mapreduce en Python.
  14. Pandas下载最新版和python不匹配
  15. python tkinter GUI编程如何实现一个时钟,无论主线程怎么卡住,都不影响时钟正常进行走时间。
  16. python tkinter GUI編程如何實現一個時鐘,無論主線程怎麼卡住,都不影響時鐘正常進行走時間。
  17. La programmation de l'interface graphique Python tkinter pour implémenter une horloge n'affecte pas le temps de fonctionnement normal de l'horloge, peu importe comment le fil principal est coincé.
  18. Pandas télécharger la dernière version ne correspond pas à Python
  19. Make a cool music player with Python [V3.0 including source code and packaged exe]
  20. 编写一个函数,可以传入两个实参或三个实参。如果传入两个实参,返回求和。如果传入三个实参,返回的话。前两个实参的和对第三个实参求余的结果Python
  21. python用tcp写server传输文件遇到的问题
  22. Python - - fichiers et exceptions
  23. Python failed to install pyinstaller, preparing wheel metadata... Error
  24. Python Turtle库 画魔法少女里的小圆晓美焰
  25. Quels sont les types de données intégrés de python? Les chiffres.
  26. python代碼實現掃碼關注公眾號登錄
  27. Mise en œuvre du Code Python
  28. 捋一捋Python中的数学运算math库(上篇)
  29. Python:晚上把附近的足浴店都给爬了一遍,好兄弟真不错
  30. python接收字符串,返回其中字符的最后一次出现,并顺序存入列表
  31. python post请求特殊data数据怎么发送
  32. Python: J'ai escaladé tous les salons de foot voisins la nuit. C'est un bon frère.
  33. Retouchez la Bibliothèque math ématiques en Python (Partie 1)
  34. 拓端tecdat:Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列
  35. 拓端tecdat|PYTHON贝叶斯推断计算:用BETA先验分布推断概率和可视化案例
  36. Extension tedat | Python Bayesian Inference Calculation: Inference Probability and Visualization Case Using Beta precedent distribution
  37. python字典里的键是不可变类型,值是可变类型对不对
  38. Extension tedat: Python Prediction and Analysis of Stock Market return time series Using Arima and GARCH Models
  39. Python小白福音!Github开源了一款神器....
  40. Python LITTLE WHITE Gospel! Github a ouvert un artefact...
  41. Opencv Python method for adjusting image contrast and background bleaching of white paper photos with text
  42. 利用Python算法画出美丽动人的妹子图像
  43. 利用Python算法畫出美麗動人的妹子圖像
  44. Utiliser l'algorithme Python pour dessiner de belles images de filles
  45. 关于python程序编写 查找数据
  46. À propos de l'écriture de programmes Python pour trouver des données
  47. python turtle 绘制七段数码管以及14段数码管显示字母和时间
  48. La tortue Python dessine sept segments de tubes numériques et 14 segments de tubes numériques pour afficher les lettres et l'heure
  49. What job can I find after learning Python? Are you ready for employment now?
  50. 关于#python#的问题,请各位专家解答!
  51. 關於#python#的問題,請各比特專家解答!
  52. S'il vous plaît répondre aux questions de Python!
  53. python代码出错,如何修改
  54. python代碼出錯,如何修改
  55. Erreur de code Python, comment modifier
  56. 如何使用Python进行超参调参和调优
  57. Comment utiliser Python pour le réglage hyperparamétrique
  58. 关于#python#的问题,请各位专家解答!
  59. S'il vous plaît répondre aux questions de Python!
  60. Quick start of automation -- python (2) - [string and operator] - half an hour a day